#[doc(hidden)] // cranelift/assembler-x64/meta/src/generate.rs:34
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub enum Inst<R: Registers> {
    pabsb_a(pabsb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpabsb_a(vpabsb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pabsw_a(pabsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpabsw_a(vpabsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pabsd_a(pabsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpabsd_a(vpabsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpabsd_c(vpabsd_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpabsq_c(vpabsq_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addb_i(addb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addw_i(addw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addl_i(addl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addq_i_sxl(addq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addb_mi(addb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addw_mi(addw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addl_mi(addl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addq_mi_sxl(addq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addl_mi_sxb(addl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addq_mi_sxb(addq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addb_mr(addb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addw_mr(addw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addl_mr(addl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addq_mr(addq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addb_rm(addb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addw_rm(addw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addl_rm(addl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addq_rm(addq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcb_i(adcb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcw_i(adcw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcl_i(adcl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcq_i_sxl(adcq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcb_mi(adcb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcw_mi(adcw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcl_mi(adcl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcq_mi_sxl(adcq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcl_mi_sxb(adcl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcq_mi_sxb(adcq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcb_mr(adcb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcw_mr(adcw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcl_mr(adcl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcq_mr(adcq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcb_rm(adcb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcw_rm(adcw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcl_rm(adcl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    adcq_rm(adcq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addb_mi(lock_addb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addw_mi(lock_addw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addl_mi(lock_addl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addq_mi_sxl(lock_addq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addl_mi_sxb(lock_addl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addq_mi_sxb(lock_addq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addb_mr(lock_addb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addw_mr(lock_addw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addl_mr(lock_addl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_addq_mr(lock_addq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcb_mi(lock_adcb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcw_mi(lock_adcw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcl_mi(lock_adcl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcq_mi_sxl(lock_adcq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcl_mi_sxb(lock_adcl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcq_mi_sxb(lock_adcq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcb_mr(lock_adcb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcw_mr(lock_adcw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcl_mr(lock_adcl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_adcq_mr(lock_adcq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xaddb_mr(lock_xaddb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xaddw_mr(lock_xaddw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xaddl_mr(lock_xaddl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xaddq_mr(lock_xaddq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addss_a(addss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addsd_a(addsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addps_a(addps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    addpd_a(addpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddb_a(paddb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddw_a(paddw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddd_a(paddd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddq_a(paddq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddsb_a(paddsb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddsw_a(paddsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddusb_a(paddusb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    paddusw_a(paddusw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    phaddw_a(phaddw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    phaddd_a(phaddd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vaddss_b(vaddss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vaddsd_b(vaddsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vaddps_b(vaddps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vaddpd_b(vaddpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddb_b(vpaddb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddw_b(vpaddw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddd_b(vpaddd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddq_b(vpaddq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddsb_b(vpaddsb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddsw_b(vpaddsw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddusb_b(vpaddusb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpaddusw_b(vpaddusw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vphaddw_b(vphaddw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vphaddd_b(vphaddd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vaddpd_c(vaddpd_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    palignr_a(palignr_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpalignr_b(vpalignr_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andb_i(andb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andw_i(andw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andl_i(andl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andq_i_sxl(andq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andb_mi(andb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andw_mi(andw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andl_mi(andl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andq_mi_sxl(andq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andl_mi_sxb(andl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andq_mi_sxb(andq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andb_mr(andb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andw_mr(andw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andl_mr(andl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andq_mr(andq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andb_rm(andb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andw_rm(andw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andl_rm(andl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andq_rm(andq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andnl_rvm(andnl_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andnq_rvm(andnq_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andb_mi(lock_andb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andw_mi(lock_andw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andl_mi(lock_andl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andq_mi_sxl(lock_andq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andl_mi_sxb(lock_andl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andq_mi_sxb(lock_andq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andb_mr(lock_andb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andw_mr(lock_andw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andl_mr(lock_andl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_andq_mr(lock_andq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andps_a(andps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andpd_a(andpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andnps_a(andnps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    andnpd_a(andnpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pand_a(pand_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pandn_a(pandn_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vandps_b(vandps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vandpd_b(vandpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vandnps_b(vandnps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vandnpd_b(vandnpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpand_b(vpand_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpandn_b(vpandn_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xchgb_rm(xchgb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xchgw_rm(xchgw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xchgl_rm(xchgl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xchgq_rm(xchgq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpxchg16b_m(cmpxchg16b_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_cmpxchg16b_m(lock_cmpxchg16b_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpxchgb_mr(cmpxchgb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpxchgw_mr(cmpxchgw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpxchgl_mr(cmpxchgl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpxchgq_mr(cmpxchgq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_cmpxchgb_mr(lock_cmpxchgb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_cmpxchgw_mr(lock_cmpxchgw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_cmpxchgl_mr(lock_cmpxchgl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_cmpxchgq_mr(lock_cmpxchgq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pavgb_a(pavgb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pavgw_a(pavgw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpavgb_b(vpavgb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpavgw_b(vpavgw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bsfw_rm(bsfw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bsfl_rm(bsfl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bsfq_rm(bsfq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bsrw_rm(bsrw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bsrl_rm(bsrl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bsrq_rm(bsrq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    tzcntw_a(tzcntw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    tzcntl_a(tzcntl_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    tzcntq_a(tzcntq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lzcntw_rm(lzcntw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lzcntl_rm(lzcntl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lzcntq_rm(lzcntq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popcntw_rm(popcntw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popcntl_rm(popcntl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popcntq_rm(popcntq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    btw_mr(btw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    btl_mr(btl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    btq_mr(btq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    btw_mi(btw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    btl_mi(btl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    btq_mi(btq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cbtw_zo(cbtw_zo<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cwtl_zo(cwtl_zo<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cltq_zo(cltq_zo<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cwtd_zo(cwtd_zo<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cltd_zo(cltd_zo<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cqto_zo(cqto_zo<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bswapl_o(bswapl_o<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bswapq_o(bswapq_o<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blsrl_vm(blsrl_vm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blsrq_vm(blsrq_vm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blsmskl_vm(blsmskl_vm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blsmskq_vm(blsmskq_vm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blsil_vm(blsil_vm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blsiq_vm(blsiq_vm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bzhil_rmv(bzhil_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    bzhiq_rmv(bzhiq_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpopcntb_a(vpopcntb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpopcntw_a(vpopcntw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovaw_rm(cmovaw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmoval_rm(cmoval_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovaq_rm(cmovaq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovaew_rm(cmovaew_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovael_rm(cmovael_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovaeq_rm(cmovaeq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovbw_rm(cmovbw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovbl_rm(cmovbl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovbq_rm(cmovbq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovbew_rm(cmovbew_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovbel_rm(cmovbel_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovbeq_rm(cmovbeq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovew_rm(cmovew_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovel_rm(cmovel_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmoveq_rm(cmoveq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovgw_rm(cmovgw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovgl_rm(cmovgl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovgq_rm(cmovgq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovgew_rm(cmovgew_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovgel_rm(cmovgel_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovgeq_rm(cmovgeq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovlw_rm(cmovlw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovll_rm(cmovll_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovlq_rm(cmovlq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovlew_rm(cmovlew_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovlel_rm(cmovlel_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovleq_rm(cmovleq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnew_rm(cmovnew_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnel_rm(cmovnel_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovneq_rm(cmovneq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnow_rm(cmovnow_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnol_rm(cmovnol_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnoq_rm(cmovnoq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnpw_rm(cmovnpw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnpl_rm(cmovnpl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnpq_rm(cmovnpq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnsw_rm(cmovnsw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnsl_rm(cmovnsl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovnsq_rm(cmovnsq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovow_rm(cmovow_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovol_rm(cmovol_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovoq_rm(cmovoq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovpw_rm(cmovpw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovpl_rm(cmovpl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovpq_rm(cmovpq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovsw_rm(cmovsw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovsl_rm(cmovsl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmovsq_rm(cmovsq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpb_i(cmpb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpw_i(cmpw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpl_i(cmpl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpq_i(cmpq_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpb_mi(cmpb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpw_mi(cmpw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpl_mi(cmpl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpq_mi(cmpq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpw_mi_sxb(cmpw_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpl_mi_sxb(cmpl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpq_mi_sxb(cmpq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpb_mr(cmpb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpw_mr(cmpw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpl_mr(cmpl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpq_mr(cmpq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpb_rm(cmpb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpw_rm(cmpw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpl_rm(cmpl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpq_rm(cmpq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testb_i(testb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testw_i(testw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testl_i(testl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testq_i(testq_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testb_mi(testb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testw_mi(testw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testl_mi(testl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testq_mi(testq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testb_mr(testb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testw_mr(testw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testl_mr(testl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    testq_mr(testq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    ptest_rm(ptest_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vptest_rm(vptest_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    ucomiss_a(ucomiss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    ucomisd_a(ucomisd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vucomiss_a(vucomiss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vucomisd_a(vucomisd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpss_a(cmpss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpsd_a(cmpsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmpps_a(cmpps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cmppd_a(cmppd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcmpss_b(vcmpss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcmpsd_b(vcmpsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcmpps_b(vcmpps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcmppd_b(vcmppd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpeqb_a(pcmpeqb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpeqw_a(pcmpeqw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpeqd_a(pcmpeqd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpeqq_a(pcmpeqq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpgtb_a(pcmpgtb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpgtw_a(pcmpgtw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpgtd_a(pcmpgtd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pcmpgtq_a(pcmpgtq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpeqb_b(vpcmpeqb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpeqw_b(vpcmpeqw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpeqd_b(vpcmpeqd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpeqq_b(vpcmpeqq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpgtb_b(vpcmpgtb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpgtw_b(vpcmpgtw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpgtd_b(vpcmpgtd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpcmpgtq_b(vpcmpgtq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtps2pd_a(cvtps2pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvttps2dq_a(cvttps2dq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtss2sd_a(cvtss2sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtss2si_a(cvtss2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtss2si_aq(cvtss2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvttss2si_a(cvttss2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvttss2si_aq(cvttss2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtps2pd_a(vcvtps2pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvttps2dq_a(vcvttps2dq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtss2sd_b(vcvtss2sd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtss2si_a(vcvtss2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtss2si_aq(vcvtss2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvttss2si_a(vcvttss2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvttss2si_aq(vcvttss2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtpd2ps_a(cvtpd2ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvttpd2dq_a(cvttpd2dq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsd2ss_a(cvtsd2ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsd2si_a(cvtsd2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsd2si_aq(cvtsd2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvttsd2si_a(cvttsd2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvttsd2si_aq(cvttsd2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtpd2ps_a(vcvtpd2ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvttpd2dq_a(vcvttpd2dq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsd2ss_b(vcvtsd2ss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsd2si_a(vcvtsd2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsd2si_aq(vcvtsd2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvttsd2si_a(vcvttsd2si_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvttsd2si_aq(vcvttsd2si_aq<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtdq2ps_a(cvtdq2ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtdq2pd_a(cvtdq2pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsi2ssl_a(cvtsi2ssl_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsi2ssq_a(cvtsi2ssq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsi2sdl_a(cvtsi2sdl_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    cvtsi2sdq_a(cvtsi2sdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtdq2pd_a(vcvtdq2pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtdq2ps_a(vcvtdq2ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsi2sdl_b(vcvtsi2sdl_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsi2sdq_b(vcvtsi2sdq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsi2ssl_b(vcvtsi2ssl_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtsi2ssq_b(vcvtsi2ssq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vcvtudq2ps_a(vcvtudq2ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divb_m(divb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divw_m(divw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divl_m(divl_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divq_m(divq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    idivb_m(idivb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    idivw_m(idivw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    idivl_m(idivl_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    idivq_m(idivq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divss_a(divss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divsd_a(divsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divps_a(divps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    divpd_a(divpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vdivss_b(vdivss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vdivsd_b(vdivsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vdivps_b(vdivps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vdivpd_b(vdivpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd132ss_a(vfmadd132ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd213ss_a(vfmadd213ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd231ss_a(vfmadd231ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd132sd_a(vfmadd132sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd213sd_a(vfmadd213sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd231sd_a(vfmadd231sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd132ps_a(vfmadd132ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd213ps_a(vfmadd213ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd231ps_a(vfmadd231ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd132pd_a(vfmadd132pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd213pd_a(vfmadd213pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmadd231pd_a(vfmadd231pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd132ss_a(vfnmadd132ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd213ss_a(vfnmadd213ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd231ss_a(vfnmadd231ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd132sd_a(vfnmadd132sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd213sd_a(vfnmadd213sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd231sd_a(vfnmadd231sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd132ps_a(vfnmadd132ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd213ps_a(vfnmadd213ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd231ps_a(vfnmadd231ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd132pd_a(vfnmadd132pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd213pd_a(vfnmadd213pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmadd231pd_a(vfnmadd231pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub132ss_a(vfmsub132ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub213ss_a(vfmsub213ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub231ss_a(vfmsub231ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub132sd_a(vfmsub132sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub213sd_a(vfmsub213sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub231sd_a(vfmsub231sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub132ps_a(vfmsub132ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub213ps_a(vfmsub213ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub231ps_a(vfmsub231ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub132pd_a(vfmsub132pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub213pd_a(vfmsub213pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfmsub231pd_a(vfmsub231pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub132ss_a(vfnmsub132ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub213ss_a(vfnmsub213ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub231ss_a(vfnmsub231ss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub132sd_a(vfnmsub132sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub213sd_a(vfnmsub213sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub231sd_a(vfnmsub231sd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub132ps_a(vfnmsub132ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub213ps_a(vfnmsub213ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub231ps_a(vfnmsub231ps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub132pd_a(vfnmsub132pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub213pd_a(vfnmsub213pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vfnmsub231pd_a(vfnmsub231pd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    jmpq_m(jmpq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    jmp_d8(jmp_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jmp_d32(jmp_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    ja_d8(ja_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    ja_d32(ja_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jae_d8(jae_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jae_d32(jae_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jb_d8(jb_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jb_d32(jb_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jbe_d8(jbe_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jbe_d32(jbe_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    je_d8(je_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    je_d32(je_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jg_d8(jg_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jg_d32(jg_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jge_d8(jge_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jge_d32(jge_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jl_d8(jl_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jl_d32(jl_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jle_d8(jle_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jle_d32(jle_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jne_d8(jne_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jne_d32(jne_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jno_d8(jno_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jno_d32(jno_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jnp_d8(jnp_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jnp_d32(jnp_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jns_d8(jns_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jns_d32(jns_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jo_d8(jo_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jo_d32(jo_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    jp_d8(jp_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    jp_d32(jp_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    js_d8(js_d8), // cranelift/assembler-x64/meta/src/generate.rs:41
    js_d32(js_d32), // cranelift/assembler-x64/meta/src/generate.rs:41
    extractps_a(extractps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pextrb_a(pextrb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pextrw_a(pextrw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pextrw_b(pextrw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pextrd_a(pextrd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pextrq_a(pextrq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vextractps_b(vextractps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpextrb_a(vpextrb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpextrw_a(vpextrw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpextrw_b(vpextrw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpextrd_a(vpextrd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpextrq_a(vpextrq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    insertps_a(insertps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pinsrb_a(pinsrb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pinsrw_a(pinsrw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pinsrd_a(pinsrd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pinsrq_a(pinsrq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vinsertps_b(vinsertps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpinsrb_b(vpinsrb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpinsrw_b(vpinsrw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpinsrd_b(vpinsrd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpinsrq_b(vpinsrq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movmskps_rm(movmskps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movmskpd_rm(movmskpd_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovmskb_rm(pmovmskb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovmskps_rm(vmovmskps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovmskpd_rm(vmovmskpd_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovmskb_rm(vpmovmskb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movhps_a(movhps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movlhps_rm(movlhps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovhps_b(vmovhps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovlhps_rvm(vmovlhps_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movddup_a(movddup_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovddup_a(vmovddup_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pblendw_rmi(pblendw_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pblendvb_rm(pblendvb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blendvps_rm0(blendvps_rm0<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    blendvpd_rm0(blendvpd_rm0<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpblendw_rvmi(vpblendw_rvmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpblendvb_rvmr(vpblendvb_rvmr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vblendvps_rvmr(vblendvps_rvmr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vblendvpd_rvmr(vblendvpd_rvmr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shufpd_a(shufpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vshufpd_b(vshufpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shufps_a(shufps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vshufps_b(vshufps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pshufb_a(pshufb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pshufd_a(pshufd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pshuflw_a(pshuflw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pshufhw_a(pshufhw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpshufb_b(vpshufb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpshufd_a(vpshufd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpshuflw_a(vpshuflw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpshufhw_a(vpshufhw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vbroadcastss_a_m(vbroadcastss_a_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vbroadcastss_a_r(vbroadcastss_a_r<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpbroadcastb_a(vpbroadcastb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpbroadcastw_a(vpbroadcastw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpbroadcastd_a(vpbroadcastd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpbroadcastq_a(vpbroadcastq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpermi2b_a(vpermi2b_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    maxss_a(maxss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    maxsd_a(maxsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    maxps_a(maxps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    maxpd_a(maxpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmaxss_b(vmaxss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmaxsd_b(vmaxsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmaxps_b(vmaxps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmaxpd_b(vmaxpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaxsb_a(pmaxsb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaxsw_a(pmaxsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaxsd_a(pmaxsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaxub_a(pmaxub_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaxuw_a(pmaxuw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaxud_a(pmaxud_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaxsb_b(vpmaxsb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaxsw_b(vpmaxsw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaxsd_b(vpmaxsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaxub_b(vpmaxub_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaxuw_b(vpmaxuw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaxud_b(vpmaxud_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    minss_a(minss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    minsd_a(minsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    minps_a(minps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    minpd_a(minpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vminss_b(vminss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vminsd_b(vminsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vminps_b(vminps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vminpd_b(vminpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pminsb_a(pminsb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pminsw_a(pminsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pminsd_a(pminsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pminub_a(pminub_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pminuw_a(pminuw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pminud_a(pminud_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpminsb_b(vpminsb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpminsw_b(vpminsw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpminsd_b(vpminsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpminub_b(vpminub_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpminuw_b(vpminuw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpminud_b(vpminud_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mfence_zo(mfence_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    sfence_zo(sfence_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    lfence_zo(lfence_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    hlt_zo(hlt_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    ud2_zo(ud2_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    int3_zo(int3_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    retq_zo(retq_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    retq_i(retq_i), // cranelift/assembler-x64/meta/src/generate.rs:41
    leaw_rm(leaw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    leal_rm(leal_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    leaq_rm(leaq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    callq_d(callq_d), // cranelift/assembler-x64/meta/src/generate.rs:41
    callq_m(callq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movb_mr(movb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movw_mr(movw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movl_mr(movl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movq_mr(movq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movb_rm(movb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movw_rm(movw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movl_rm(movl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movq_rm(movq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movb_oi(movb_oi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movw_oi(movw_oi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movl_oi(movl_oi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movabsq_oi(movabsq_oi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movb_mi(movb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movw_mi(movw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movl_mi(movl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movq_mi_sxl(movq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsbw_rm(movsbw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsbl_rm(movsbl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsbq_rm(movsbq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsww_rm(movsww_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movswl_rm(movswl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movswq_rm(movswq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movslq_rm(movslq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movzbw_rm(movzbw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movzbl_rm(movzbl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movzbq_rm(movzbq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movzww_rm(movzww_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movzwl_rm(movzwl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movzwq_rm(movzwq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movd_a(movd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movq_a(movq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movd_b(movd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movq_b(movq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovd_a(vmovd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovq_a(vmovq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovd_b(vmovd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovq_b(vmovq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movss_a_m(movss_a_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movss_a_r(movss_a_r<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movss_c_m(movss_c_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsd_a_m(movsd_a_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsd_a_r(movsd_a_r<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movsd_c_m(movsd_c_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovss_d(vmovss_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovss_b(vmovss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovss_c_m(vmovss_c_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovsd_d(vmovsd_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovsd_b(vmovsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovsd_c_m(vmovsd_c_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movapd_a(movapd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movapd_b(movapd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movaps_a(movaps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movaps_b(movaps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movdqa_a(movdqa_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movdqa_b(movdqa_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovapd_a(vmovapd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovapd_b(vmovapd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovaps_a(vmovaps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovaps_b(vmovaps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovdqa_a(vmovdqa_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovdqa_b(vmovdqa_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movupd_a(movupd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movupd_b(movupd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movups_a(movups_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movups_b(movups_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movdqu_a(movdqu_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    movdqu_b(movdqu_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovupd_a(vmovupd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovupd_b(vmovupd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovups_a(vmovups_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovups_b(vmovups_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovdqu_a(vmovdqu_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmovdqu_b(vmovdqu_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovsxbw_a(pmovsxbw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovsxbd_a(pmovsxbd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovsxbq_a(pmovsxbq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovsxwd_a(pmovsxwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovsxwq_a(pmovsxwq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovsxdq_a(pmovsxdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovsxbw_a(vpmovsxbw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovsxbd_a(vpmovsxbd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovsxbq_a(vpmovsxbq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovsxwd_a(vpmovsxwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovsxwq_a(vpmovsxwq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovsxdq_a(vpmovsxdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovzxbw_a(pmovzxbw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovzxbd_a(pmovzxbd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovzxbq_a(pmovzxbq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovzxwd_a(pmovzxwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovzxwq_a(pmovzxwq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmovzxdq_a(pmovzxdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovzxbw_a(vpmovzxbw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovzxbd_a(vpmovzxbd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovzxbq_a(vpmovzxbq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovzxwd_a(vpmovzxwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovzxwq_a(vpmovzxwq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmovzxdq_a(vpmovzxdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulb_m(mulb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulw_m(mulw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mull_m(mull_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulq_m(mulq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulb_m(imulb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulw_m(imulw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imull_m(imull_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulq_m(imulq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulw_rm(imulw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imull_rm(imull_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulq_rm(imulq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulw_rmi_sxb(imulw_rmi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imull_rmi_sxb(imull_rmi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulq_rmi_sxb(imulq_rmi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulw_rmi(imulw_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imull_rmi(imull_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    imulq_rmi_sxl(imulq_rmi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulxl_rvm(mulxl_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulxq_rvm(mulxq_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulss_a(mulss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulsd_a(mulsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulps_a(mulps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    mulpd_a(mulpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmuldq_a(pmuldq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmulhrsw_a(pmulhrsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmulhuw_a(pmulhuw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmulhw_a(pmulhw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmulld_a(pmulld_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmullw_a(pmullw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmuludq_a(pmuludq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmulss_b(vmulss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmulsd_b(vmulsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmulps_b(vmulps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vmulpd_b(vmulpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmuldq_b(vpmuldq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmulhrsw_b(vpmulhrsw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmulhuw_b(vpmulhuw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmulhw_b(vpmulhw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmulld_b(vpmulld_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmullw_b(vpmullw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmuludq_b(vpmuludq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmulld_c(vpmulld_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmullq_c(vpmullq_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    negb_m(negb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    negw_m(negw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    negl_m(negl_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    negq_m(negq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    notb_m(notb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    notw_m(notw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    notl_m(notl_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    notq_m(notq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_zo(nop_zo), // cranelift/assembler-x64/meta/src/generate.rs:41
    nopl_m(nopl_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_1b(nop_1b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_2b(nop_2b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_3b(nop_3b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_4b(nop_4b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_5b(nop_5b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_6b(nop_6b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_7b(nop_7b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_8b(nop_8b), // cranelift/assembler-x64/meta/src/generate.rs:41
    nop_9b(nop_9b), // cranelift/assembler-x64/meta/src/generate.rs:41
    orb_i(orb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orw_i(orw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orl_i(orl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orq_i_sxl(orq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orb_mi(orb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orw_mi(orw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orl_mi(orl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orq_mi_sxl(orq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orl_mi_sxb(orl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orq_mi_sxb(orq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orb_mr(orb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orw_mr(orw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orl_mr(orl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orq_mr(orq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orb_rm(orb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orw_rm(orw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orl_rm(orl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orq_rm(orq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orb_mi(lock_orb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orw_mi(lock_orw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orl_mi(lock_orl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orq_mi_sxl(lock_orq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orl_mi_sxb(lock_orl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orq_mi_sxb(lock_orq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orb_mr(lock_orb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orw_mr(lock_orw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orl_mr(lock_orl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_orq_mr(lock_orq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orps_a(orps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    orpd_a(orpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    por_a(por_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vorps_b(vorps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vorpd_b(vorpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpor_b(vpor_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    packsswb_a(packsswb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    packssdw_a(packssdw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpacksswb_b(vpacksswb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpackssdw_b(vpackssdw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    packuswb_a(packuswb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    packusdw_a(packusdw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpackuswb_b(vpackuswb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpackusdw_b(vpackusdw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaddwd_a(pmaddwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaddwd_b(vpmaddwd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pmaddubsw_a(pmaddubsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpmaddubsw_b(vpmaddubsw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rcpps_rm(rcpps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rcpss_rm(rcpss_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rsqrtps_rm(rsqrtps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rsqrtss_rm(rsqrtss_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vrcpps_rm(vrcpps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vrcpss_rvm(vrcpss_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vrsqrtps_rm(vrsqrtps_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vrsqrtss_rvm(vrsqrtss_rvm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roundpd_rmi(roundpd_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roundps_rmi(roundps_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roundsd_rmi(roundsd_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roundss_rmi(roundss_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vroundpd_rmi(vroundpd_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vroundps_rmi(vroundps_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vroundsd_rvmi(vroundsd_rvmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vroundss_rvmi(vroundss_rvmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    seta_m(seta_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setae_m(setae_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setb_m(setb_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setbe_m(setbe_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sete_m(sete_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setg_m(setg_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setge_m(setge_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setl_m(setl_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setle_m(setle_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setne_m(setne_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setno_m(setno_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setnp_m(setnp_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setns_m(setns_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    seto_m(seto_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    setp_m(setp_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sets_m(sets_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarb_mc(sarb_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarb_mi(sarb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarb_m1(sarb_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarw_mc(sarw_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarw_mi(sarw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarw_m1(sarw_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarl_mc(sarl_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarl_mi(sarl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarl_m1(sarl_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarq_mc(sarq_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarq_mi(sarq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarq_m1(sarq_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlb_mc(shlb_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlb_mi(shlb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlb_m1(shlb_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlw_mc(shlw_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlw_mi(shlw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlw_m1(shlw_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shll_mc(shll_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shll_mi(shll_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shll_m1(shll_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlq_mc(shlq_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlq_mi(shlq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlq_m1(shlq_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrb_mc(shrb_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrb_mi(shrb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrb_m1(shrb_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrw_mc(shrw_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrw_mi(shrw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrw_m1(shrw_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrl_mc(shrl_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrl_mi(shrl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrl_m1(shrl_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrq_mc(shrq_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrq_mi(shrq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrq_m1(shrq_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolb_mc(rolb_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolb_mi(rolb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolb_m1(rolb_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolw_mc(rolw_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolw_mi(rolw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolw_m1(rolw_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roll_mc(roll_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roll_mi(roll_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    roll_m1(roll_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolq_mc(rolq_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolq_mi(rolq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rolq_m1(rolq_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorb_mc(rorb_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorb_mi(rorb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorb_m1(rorb_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorw_mc(rorw_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorw_mi(rorw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorw_m1(rorw_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorl_mc(rorl_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorl_mi(rorl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorl_m1(rorl_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorq_mc(rorq_mc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorq_mi(rorq_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorq_m1(rorq_m1<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shldw_mri(shldw_mri<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shldw_mrc(shldw_mrc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shldl_mri(shldl_mri<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shldq_mri(shldq_mri<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shldl_mrc(shldl_mrc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shldq_mrc(shldq_mrc<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarxl_rmv(sarxl_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlxl_rmv(shlxl_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrxl_rmv(shrxl_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sarxq_rmv(sarxq_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shlxq_rmv(shlxq_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    shrxq_rmv(shrxq_rmv<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorxl_rmi(rorxl_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    rorxq_rmi(rorxq_rmi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psllw_a(psllw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psllw_b(psllw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pslld_a(pslld_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pslld_b(pslld_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psllq_a(psllq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psllq_b(psllq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsllw_c(vpsllw_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsllw_d(vpsllw_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpslld_c(vpslld_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpslld_d(vpslld_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsllq_c(vpsllq_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsllq_d(vpsllq_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpslld_g(vpslld_g<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpslld_f(vpslld_f<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsllq_g(vpsllq_g<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsllq_f(vpsllq_f<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psraw_a(psraw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psraw_b(psraw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrad_a(psrad_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrad_b(psrad_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrlw_a(psrlw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrlw_b(psrlw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrld_a(psrld_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrld_b(psrld_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrlq_a(psrlq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psrlq_b(psrlq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsraw_c(vpsraw_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsraw_d(vpsraw_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrad_c(vpsrad_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrad_d(vpsrad_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrlw_c(vpsrlw_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrlw_d(vpsrlw_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrld_c(vpsrld_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrld_d(vpsrld_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrlq_c(vpsrlq_c<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrlq_d(vpsrlq_d<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrad_g(vpsrad_g<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrad_f(vpsrad_f<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsraq_g(vpsraq_g<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsraq_f(vpsraq_f<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrld_g(vpsrld_g<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrld_f(vpsrld_f<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrlq_g(vpsrlq_g<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsrlq_f(vpsrlq_f<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sqrtss_a(sqrtss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sqrtsd_a(sqrtsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sqrtps_a(sqrtps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sqrtpd_a(sqrtpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsqrtss_b(vsqrtss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsqrtsd_b(vsqrtsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsqrtps_b(vsqrtps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsqrtpd_b(vsqrtpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popw_m(popw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popq_m(popq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popw_o(popw_o<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    popq_o(popq_o<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushw_m(pushw_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushq_m(pushq_m<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushw_o(pushw_o<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushq_o(pushq_o<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushq_i8(pushq_i8), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushw_i16(pushw_i16), // cranelift/assembler-x64/meta/src/generate.rs:41
    pushq_i32(pushq_i32), // cranelift/assembler-x64/meta/src/generate.rs:41
    subb_i(subb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subw_i(subw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subl_i(subl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subq_i_sxl(subq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subb_mi(subb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subw_mi(subw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subl_mi(subl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subq_mi_sxl(subq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subl_mi_sxb(subl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subq_mi_sxb(subq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subb_mr(subb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subw_mr(subw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subl_mr(subl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subq_mr(subq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subb_rm(subb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subw_rm(subw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subl_rm(subl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subq_rm(subq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbb_i(sbbb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbw_i(sbbw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbl_i(sbbl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbq_i_sxl(sbbq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbb_mi(sbbb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbw_mi(sbbw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbl_mi(sbbl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbq_mi_sxl(sbbq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbl_mi_sxb(sbbl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbq_mi_sxb(sbbq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbb_mr(sbbb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbw_mr(sbbw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbl_mr(sbbl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbq_mr(sbbq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbb_rm(sbbb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbw_rm(sbbw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbl_rm(sbbl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    sbbq_rm(sbbq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subb_mi(lock_subb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subw_mi(lock_subw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subl_mi(lock_subl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subq_mi_sxl(lock_subq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subl_mi_sxb(lock_subl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subq_mi_sxb(lock_subq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subb_mr(lock_subb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subw_mr(lock_subw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subl_mr(lock_subl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_subq_mr(lock_subq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbb_mi(lock_sbbb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbw_mi(lock_sbbw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbl_mi(lock_sbbl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbq_mi_sxl(lock_sbbq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbl_mi_sxb(lock_sbbl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbq_mi_sxb(lock_sbbq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbb_mr(lock_sbbb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbw_mr(lock_sbbw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbl_mr(lock_sbbl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_sbbq_mr(lock_sbbq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subss_a(subss_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subsd_a(subsd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subps_a(subps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    subpd_a(subpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubb_a(psubb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubw_a(psubw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubd_a(psubd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubq_a(psubq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubsb_a(psubsb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubsw_a(psubsw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubusb_a(psubusb_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    psubusw_a(psubusw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsubss_b(vsubss_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsubsd_b(vsubsd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsubps_b(vsubps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vsubpd_b(vsubpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubb_b(vpsubb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubw_b(vpsubw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubd_b(vpsubd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubq_b(vpsubq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubsb_b(vpsubsb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubsw_b(vpsubsw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubusb_b(vpsubusb_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpsubusw_b(vpsubusw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    unpcklps_a(unpcklps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    unpcklpd_a(unpcklpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    unpckhps_a(unpckhps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vunpcklps_b(vunpcklps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vunpcklpd_b(vunpcklpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vunpckhps_b(vunpckhps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpckhbw_a(punpckhbw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpckhwd_a(punpckhwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpckhdq_a(punpckhdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpckhqdq_a(punpckhqdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpcklwd_a(punpcklwd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpcklbw_a(punpcklbw_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpckldq_a(punpckldq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    punpcklqdq_a(punpcklqdq_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpckhbw_b(vpunpckhbw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpckhwd_b(vpunpckhwd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpckhdq_b(vpunpckhdq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpckhqdq_b(vpunpckhqdq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpcklwd_b(vpunpcklwd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpcklbw_b(vpunpcklbw_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpckldq_b(vpunpckldq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpunpcklqdq_b(vpunpcklqdq_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorb_i(xorb_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorw_i(xorw_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorl_i(xorl_i<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorq_i_sxl(xorq_i_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorb_mi(xorb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorw_mi(xorw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorl_mi(xorl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorq_mi_sxl(xorq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorl_mi_sxb(xorl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorq_mi_sxb(xorq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorb_mr(xorb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorw_mr(xorw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorl_mr(xorl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorq_mr(xorq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorb_rm(xorb_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorw_rm(xorw_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorl_rm(xorl_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorq_rm(xorq_rm<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorb_mi(lock_xorb_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorw_mi(lock_xorw_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorl_mi(lock_xorl_mi<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorq_mi_sxl(lock_xorq_mi_sxl<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorl_mi_sxb(lock_xorl_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorq_mi_sxb(lock_xorq_mi_sxb<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorb_mr(lock_xorb_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorw_mr(lock_xorw_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorl_mr(lock_xorl_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    lock_xorq_mr(lock_xorq_mr<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorps_a(xorps_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    xorpd_a(xorpd_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    pxor_a(pxor_a<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vxorps_b(vxorps_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vxorpd_b(vxorpd_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
    vpxor_b(vpxor_b<R>), // cranelift/assembler-x64/meta/src/generate.rs:41
}
impl<R: Registers> Inst<R> {
    pub fn encode(&self, b: &mut impl CodeSink) {
        match self {
            Self::pabsb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsq_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::palignr_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpalignr_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnl_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnq_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pand_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pandn_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpand_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpandn_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchg16b_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchg16b_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntl_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cbtw_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtl_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltq_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtd_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltd_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cqto_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapl_o(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapq_o(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrl_vm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrq_vm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskl_vm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskq_vm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsil_vm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsiq_vm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhil_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhiq_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoval_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaew_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovael_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaeq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbew_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbel_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbeq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovew_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovel_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoveq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgew_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgel_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgeq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovll_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlew_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlel_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovleq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnew_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnel_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovneq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnow_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnol_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnoq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovow_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovol_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovoq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ptest_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vptest_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomiss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomisd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomiss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomisd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmppd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmppd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtps2pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttps2dq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtps2pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttps2dq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2sd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtpd2ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttpd2dq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtpd2ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttpd2dq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2ss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_aq(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssl_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdl_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdl_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssl_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtudq2ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divl_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivl_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231sd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231pd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmpq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::extractps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vextractps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::insertps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vinsertps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskpd_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovmskb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskpd_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovmskb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movhps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movlhps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovhps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovlhps_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movddup_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovddup_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendw_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendvb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvps_rm0(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvpd_rm0(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendw_rvmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendvb_rvmr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvps_rvmr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvpd_rvmr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshuflw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufhw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshuflw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufhw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_r(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpermi2b_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxub_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxuw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxud_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxub_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxuw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxud_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminub_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminuw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminud_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminub_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminuw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminud_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mfence_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sfence_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lfence_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::hlt_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ud2_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::int3_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leal_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_oi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_oi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_oi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movabsq_oi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsww_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movslq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzww_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_r(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_c_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_r(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_c_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_c_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_c_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mull_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxl_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxq_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuldq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhrsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhuw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulld_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmullw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuludq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuldq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhrsw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhuw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuludq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullq_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negl_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notl_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_zo(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nopl_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_1b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_2b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_3b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_4b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_5b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_6b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_7b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_8b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_9b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::por_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpor_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packsswb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packssdw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpacksswb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackssdw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packuswb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packusdw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackuswb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackusdw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddwd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddubsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddubsw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpss_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtss_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpss_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtps_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtss_rvm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundpd_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundps_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundsd_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundss_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundpd_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundps_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundsd_rvmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundss_rvmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seta_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setae_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setb_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setbe_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sete_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setg_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setge_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setl_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setle_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setne_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setno_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setnp_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setns_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seto_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setp_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sets_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_m1(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mri(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mrc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mri(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mri(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mrc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mrc(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxl_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxl_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxl_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxq_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxq_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxq_rmv(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxl_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxq_rmi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_g(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_f(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_g(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_f(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_c(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_d(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_g(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_f(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_g(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_f(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_g(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_f(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_g(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_f(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_o(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_o(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_m(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_o(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_o(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i8(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_i16(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i32(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subss_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subsd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusb_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubss_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubsd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusb_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpckhps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpckhps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhbw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhqdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklwd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklbw_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckldq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklqdq_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhbw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhwd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhdq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhqdq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklwd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklbw_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckldq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklqdq_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_i(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_i_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_rm(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxl(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxb(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mr(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorps_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorpd_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pxor_a(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorps_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorpd_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpxor_b(i) => i.encode(b), // cranelift/assembler-x64/meta/src/generate.rs:51
        }
    }
    pub fn visit(&mut self, v: &mut impl RegisterVisitor<R>) {
        match self {
            Self::pabsb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsq_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::palignr_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpalignr_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnl_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnq_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pand_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pandn_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpand_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpandn_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchg16b_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchg16b_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntl_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cbtw_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtl_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltq_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtd_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltd_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cqto_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapl_o(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapq_o(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrl_vm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrq_vm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskl_vm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskq_vm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsil_vm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsiq_vm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhil_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhiq_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoval_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaew_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovael_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaeq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbew_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbel_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbeq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovew_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovel_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoveq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgew_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgel_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgeq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovll_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlew_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlel_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovleq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnew_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnel_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovneq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnow_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnol_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnoq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovow_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovol_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovoq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ptest_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vptest_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomiss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomisd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomiss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomisd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmppd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmppd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtps2pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttps2dq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtps2pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttps2dq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2sd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtpd2ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttpd2dq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtpd2ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttpd2dq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2ss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_aq(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssl_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdl_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdl_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssl_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtudq2ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divl_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivl_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231sd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231pd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmpq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::extractps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vextractps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::insertps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vinsertps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskpd_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovmskb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskpd_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovmskb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movhps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movlhps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovhps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovlhps_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movddup_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovddup_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendw_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendvb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvps_rm0(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvpd_rm0(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendw_rvmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendvb_rvmr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvps_rvmr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvpd_rvmr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshuflw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufhw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshuflw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufhw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_r(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpermi2b_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxub_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxuw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxud_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxub_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxuw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxud_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminub_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminuw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminud_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminub_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminuw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminud_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mfence_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sfence_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lfence_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::hlt_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ud2_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::int3_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leal_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_oi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_oi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_oi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movabsq_oi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsww_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movslq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzww_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_r(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_c_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_r(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_c_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_c_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_c_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mull_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxl_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxq_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuldq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhrsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhuw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulld_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmullw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuludq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuldq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhrsw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhuw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuludq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullq_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negl_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notl_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_zo(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nopl_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_1b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_2b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_3b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_4b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_5b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_6b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_7b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_8b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_9b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::por_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpor_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packsswb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packssdw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpacksswb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackssdw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packuswb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packusdw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackuswb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackusdw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddwd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddubsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddubsw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpss_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtss_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpss_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtps_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtss_rvm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundpd_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundps_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundsd_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundss_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundpd_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundps_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundsd_rvmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundss_rvmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seta_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setae_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setb_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setbe_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sete_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setg_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setge_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setl_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setle_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setne_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setno_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setnp_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setns_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seto_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setp_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sets_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_m1(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mri(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mrc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mri(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mri(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mrc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mrc(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxl_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxl_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxl_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxq_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxq_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxq_rmv(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxl_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxq_rmi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_g(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_f(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_g(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_f(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_c(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_d(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_g(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_f(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_g(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_f(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_g(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_f(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_g(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_f(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_o(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_o(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_m(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_o(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_o(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i8(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_i16(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i32(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subss_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subsd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusb_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubss_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubsd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusb_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpckhps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpckhps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhbw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhqdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklwd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklbw_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckldq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklqdq_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhbw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhwd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhdq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhqdq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklwd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklbw_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckldq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklqdq_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_i(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_i_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_rm(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxl(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxb(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mr(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorps_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorpd_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pxor_a(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorps_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorpd_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpxor_b(i) => i.visit(v), // cranelift/assembler-x64/meta/src/generate.rs:51
        }
    }
    pub fn is_available(&self, f: &impl AvailableFeatures) -> bool {
        match self {
            Self::pabsb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsq_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::palignr_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpalignr_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnl_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnq_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pand_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pandn_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpand_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpandn_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchg16b_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchg16b_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntl_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cbtw_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtl_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltq_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtd_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltd_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cqto_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapl_o(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapq_o(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrl_vm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrq_vm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskl_vm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskq_vm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsil_vm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsiq_vm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhil_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhiq_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoval_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaew_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovael_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaeq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbew_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbel_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbeq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovew_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovel_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoveq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgew_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgel_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgeq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovll_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlew_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlel_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovleq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnew_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnel_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovneq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnow_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnol_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnoq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovow_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovol_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovoq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ptest_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vptest_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomiss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomisd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomiss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomisd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmppd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmppd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtps2pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttps2dq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtps2pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttps2dq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2sd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtpd2ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttpd2dq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtpd2ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttpd2dq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2ss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_aq(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssl_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdl_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdl_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssl_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtudq2ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divl_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivl_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231sd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231pd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmpq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::extractps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vextractps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::insertps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vinsertps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskpd_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovmskb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskpd_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovmskb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movhps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movlhps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovhps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovlhps_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movddup_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovddup_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendw_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendvb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvps_rm0(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvpd_rm0(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendw_rvmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendvb_rvmr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvps_rvmr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvpd_rvmr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshuflw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufhw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshuflw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufhw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_r(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpermi2b_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxub_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxuw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxud_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxub_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxuw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxud_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminub_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminuw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminud_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminub_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminuw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminud_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mfence_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sfence_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lfence_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::hlt_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ud2_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::int3_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leal_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_oi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_oi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_oi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movabsq_oi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsww_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movslq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzww_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_r(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_c_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_r(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_c_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_c_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_c_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mull_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxl_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxq_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuldq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhrsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhuw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulld_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmullw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuludq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuldq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhrsw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhuw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuludq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullq_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negl_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notl_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_zo(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nopl_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_1b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_2b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_3b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_4b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_5b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_6b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_7b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_8b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_9b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::por_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpor_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packsswb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packssdw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpacksswb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackssdw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packuswb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packusdw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackuswb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackusdw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddwd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddubsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddubsw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpss_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtss_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpss_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtps_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtss_rvm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundpd_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundps_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundsd_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundss_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundpd_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundps_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundsd_rvmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundss_rvmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seta_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setae_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setb_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setbe_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sete_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setg_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setge_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setl_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setle_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setne_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setno_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setnp_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setns_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seto_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setp_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sets_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_m1(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mri(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mrc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mri(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mri(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mrc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mrc(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxl_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxl_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxl_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxq_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxq_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxq_rmv(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxl_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxq_rmi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_g(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_f(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_g(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_f(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_c(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_d(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_g(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_f(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_g(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_f(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_g(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_f(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_g(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_f(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_o(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_o(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_m(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_o(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_o(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i8(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_i16(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i32(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subss_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subsd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusb_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubss_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubsd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusb_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpckhps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpckhps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhbw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhqdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklwd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklbw_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckldq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklqdq_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhbw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhwd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhdq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhqdq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklwd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklbw_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckldq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklqdq_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_i(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_i_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_rm(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxl(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxb(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mr(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorps_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorpd_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pxor_a(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorps_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorpd_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpxor_b(i) => i.is_available(f), // cranelift/assembler-x64/meta/src/generate.rs:51
        }
    }
    pub fn features(&self) -> &'static Features {
        match self {
            Self::pabsb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsq_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::palignr_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpalignr_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnl_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnq_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pand_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pandn_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpand_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpandn_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchg16b_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchg16b_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntl_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cbtw_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtl_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltq_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtd_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltd_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cqto_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapl_o(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapq_o(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrl_vm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrq_vm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskl_vm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskq_vm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsil_vm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsiq_vm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhil_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhiq_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoval_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaew_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovael_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaeq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbew_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbel_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbeq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovew_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovel_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoveq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgew_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgel_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgeq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovll_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlew_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlel_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovleq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnew_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnel_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovneq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnow_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnol_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnoq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovow_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovol_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovoq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ptest_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vptest_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomiss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomisd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomiss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomisd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmppd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmppd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtps2pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttps2dq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtps2pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttps2dq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2sd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtpd2ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttpd2dq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtpd2ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttpd2dq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2ss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_aq(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssl_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdl_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdl_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssl_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtudq2ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divl_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivl_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231sd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231pd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmpq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::extractps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vextractps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::insertps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vinsertps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskpd_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovmskb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskpd_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovmskb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movhps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movlhps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovhps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovlhps_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movddup_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovddup_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendw_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendvb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvps_rm0(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvpd_rm0(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendw_rvmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendvb_rvmr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvps_rvmr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvpd_rvmr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshuflw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufhw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshuflw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufhw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_r(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpermi2b_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxub_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxuw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxud_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxub_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxuw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxud_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminub_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminuw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminud_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminub_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminuw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminud_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mfence_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sfence_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lfence_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::hlt_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ud2_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::int3_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leal_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_oi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_oi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_oi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movabsq_oi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsww_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movslq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzww_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_r(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_c_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_r(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_c_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_c_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_c_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mull_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxl_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxq_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuldq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhrsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhuw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulld_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmullw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuludq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuldq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhrsw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhuw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuludq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullq_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negl_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notl_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_zo(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nopl_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_1b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_2b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_3b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_4b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_5b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_6b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_7b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_8b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_9b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::por_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpor_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packsswb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packssdw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpacksswb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackssdw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packuswb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packusdw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackuswb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackusdw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddwd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddubsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddubsw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpss_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtss_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpss_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtps_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtss_rvm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundpd_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundps_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundsd_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundss_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundpd_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundps_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundsd_rvmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundss_rvmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seta_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setae_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setb_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setbe_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sete_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setg_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setge_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setl_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setle_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setne_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setno_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setnp_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setns_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seto_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setp_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sets_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_m1(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mri(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mrc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mri(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mri(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mrc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mrc(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxl_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxl_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxl_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxq_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxq_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxq_rmv(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxl_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxq_rmi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_g(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_f(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_g(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_f(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_c(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_d(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_g(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_f(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_g(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_f(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_g(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_f(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_g(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_f(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_o(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_o(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_m(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_o(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_o(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i8(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_i16(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i32(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subss_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subsd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusb_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubss_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubsd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusb_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpckhps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpckhps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhbw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhqdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklwd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklbw_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckldq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklqdq_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhbw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhwd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhdq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhqdq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklwd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklbw_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckldq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklqdq_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_i(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_i_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_rm(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxl(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxb(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mr(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorps_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorpd_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pxor_a(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorps_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorpd_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpxor_b(i) => i.features(), // cranelift/assembler-x64/meta/src/generate.rs:51
        }
    }
    pub fn num_registers_available(&self) -> usize {
        match self {
            Self::pabsb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsq_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::palignr_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpalignr_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnl_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnq_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pand_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pandn_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpand_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpandn_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchg16b_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchg16b_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntl_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cbtw_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtl_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltq_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtd_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltd_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cqto_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapl_o(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapq_o(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrl_vm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrq_vm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskl_vm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskq_vm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsil_vm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsiq_vm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhil_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhiq_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoval_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaew_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovael_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaeq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbew_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbel_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbeq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovew_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovel_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoveq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgew_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgel_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgeq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovll_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlew_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlel_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovleq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnew_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnel_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovneq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnow_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnol_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnoq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovow_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovol_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovoq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ptest_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vptest_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomiss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomisd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomiss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomisd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmppd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmppd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtps2pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttps2dq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtps2pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttps2dq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2sd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtpd2ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttpd2dq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtpd2ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttpd2dq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2ss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_aq(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssl_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdl_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdl_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssl_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtudq2ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divl_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivl_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231sd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231pd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmpq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::extractps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vextractps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::insertps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vinsertps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskpd_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovmskb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskpd_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovmskb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movhps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movlhps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovhps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovlhps_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movddup_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovddup_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendw_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendvb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvps_rm0(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvpd_rm0(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendw_rvmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendvb_rvmr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvps_rvmr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvpd_rvmr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshuflw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufhw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshuflw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufhw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_r(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpermi2b_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxub_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxuw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxud_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxub_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxuw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxud_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminub_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminuw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminud_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminub_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminuw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminud_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mfence_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sfence_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lfence_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::hlt_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ud2_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::int3_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leal_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_oi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_oi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_oi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movabsq_oi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsww_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movslq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzww_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_r(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_c_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_r(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_c_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_c_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_c_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mull_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxl_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxq_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuldq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhrsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhuw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulld_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmullw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuludq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuldq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhrsw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhuw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuludq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullq_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negl_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notl_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_zo(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nopl_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_1b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_2b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_3b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_4b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_5b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_6b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_7b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_8b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_9b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::por_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpor_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packsswb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packssdw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpacksswb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackssdw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packuswb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packusdw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackuswb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackusdw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddwd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddubsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddubsw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpss_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtss_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpss_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtps_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtss_rvm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundpd_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundps_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundsd_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundss_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundpd_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundps_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundsd_rvmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundss_rvmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seta_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setae_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setb_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setbe_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sete_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setg_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setge_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setl_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setle_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setne_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setno_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setnp_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setns_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seto_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setp_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sets_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_m1(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mri(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mrc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mri(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mri(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mrc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mrc(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxl_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxl_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxl_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxq_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxq_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxq_rmv(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxl_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxq_rmi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_g(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_f(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_g(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_f(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_c(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_d(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_g(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_f(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_g(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_f(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_g(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_f(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_g(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_f(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_o(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_o(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_m(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_o(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_o(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i8(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_i16(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i32(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subss_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subsd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusb_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubss_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubsd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusb_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpckhps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpckhps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhbw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhqdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklwd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklbw_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckldq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklqdq_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhbw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhwd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhdq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhqdq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklwd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklbw_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckldq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklqdq_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_i(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_i_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_rm(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxl(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxb(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mr(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorps_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorpd_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pxor_a(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorps_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorpd_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpxor_b(i) => i.num_registers_available(), // cranelift/assembler-x64/meta/src/generate.rs:51
        }
    }
}
impl<R: Registers> core::fmt::Display for Inst<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        match self {
            Self::pabsb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pabsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsd_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpabsq_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::adcq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_addq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_adcq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xaddq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::addpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::paddusw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::phaddd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddsw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpaddusw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vphaddd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vaddpd_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::palignr_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpalignr_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnl_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnq_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_andq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::andnpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pand_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pandn_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vandnpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpand_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpandn_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xchgq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchg16b_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchg16b_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpxchgq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_cmpxchgq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pavgw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpavgw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsfq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bsrq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntl_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::tzcntq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lzcntq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popcntq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::btq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cbtw_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtl_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltq_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cwtd_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cltd_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cqto_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapl_o(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bswapq_o(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrl_vm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsrq_vm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskl_vm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsmskq_vm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsil_vm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blsiq_vm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhil_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::bzhiq_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpopcntw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoval_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaew_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovael_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovaeq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbew_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbel_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovbeq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovew_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovel_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmoveq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgew_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgel_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovgeq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovll_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlew_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovlel_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovleq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnew_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnel_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovneq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnow_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnol_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnoq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnpq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovnsq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovow_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovol_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovoq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovpq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmovsq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::testq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ptest_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vptest_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomiss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ucomisd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomiss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vucomisd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmpps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cmppd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmpps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcmppd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpeqq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pcmpgtq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpeqq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpcmpgtq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtps2pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttps2dq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtss2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttss2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtps2pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttps2dq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2sd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtss2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttss2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtpd2ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttpd2dq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsd2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvttsd2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtpd2ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttpd2dq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2ss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsd2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvttsd2si_aq(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtdq2pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssl_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2ssq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdl_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::cvtsi2sdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtdq2ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdl_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2sdq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssl_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtsi2ssq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vcvtudq2ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divl_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivl_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::idivq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::divpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vdivpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd132pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd213pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmadd231pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd132pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd213pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmadd231pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub132pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub213pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfmsub231pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231sd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231ps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub132pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub213pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vfnmsub231pd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmpq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jmp_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ja_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jae_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jb_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jbe_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::je_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jg_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jge_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jl_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jle_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jne_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jno_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jnp_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jns_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jo_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::jp_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::js_d32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::extractps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pextrq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vextractps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpextrq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::insertps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pinsrq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vinsertps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpinsrq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movmskpd_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovmskb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovmskpd_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovmskb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movhps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movlhps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovhps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovlhps_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movddup_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovddup_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendw_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pblendvb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvps_rm0(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::blendvpd_rm0(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendw_rvmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpblendvb_rvmr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvps_rvmr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vblendvpd_rvmr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shufps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vshufps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshuflw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pshufhw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshuflw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpshufhw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vbroadcastss_a_r(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpbroadcastq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpermi2b_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::maxpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmaxpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxub_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxuw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaxud_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxub_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxuw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaxud_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::minpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vminpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminub_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminuw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pminud_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminub_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminuw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpminud_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mfence_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sfence_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lfence_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::hlt_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::ud2_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::int3_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::retq_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leal_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::leaq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::callq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_oi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_oi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_oi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movabsq_oi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsbq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsww_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movswq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movslq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzbq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzww_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movzwq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_a_r(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movss_c_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_a_r(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movsd_c_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovss_c_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovsd_c_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movapd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movaps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqa_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovapd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovaps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqa_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movupd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movups_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::movdqu_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovupd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovups_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmovdqu_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxbq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxwq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovsxdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxbq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxwq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovsxdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxbq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxwq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmovzxdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxbq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxwq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmovzxdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mull_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulw_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imull_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::imulq_rmi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxl_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulxq_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::mulpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuldq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhrsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhuw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulhw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmulld_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmullw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmuludq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vmulpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuldq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhrsw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhuw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulhw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmuludq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmulld_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmullq_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negl_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::negq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notl_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::notq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_zo(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nopl_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_1b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_2b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_3b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_4b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_5b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_6b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_7b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_8b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::nop_9b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_orq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::orpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::por_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vorpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpor_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packsswb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packssdw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpacksswb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackssdw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packuswb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::packusdw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackuswb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpackusdw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddwd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pmaddubsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpmaddubsw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rcpss_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rsqrtss_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrcpss_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtps_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vrsqrtss_rvm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundpd_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundps_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundsd_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roundss_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundpd_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundps_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundsd_rvmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vroundss_rvmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seta_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setae_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setb_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setbe_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sete_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setg_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setge_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setl_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setle_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setne_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setno_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setnp_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setns_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::seto_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::setp_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sets_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarb_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarw_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarl_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarq_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlb_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlw_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shll_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlq_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrb_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrw_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrl_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrq_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolb_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolw_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::roll_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rolq_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorb_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorw_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorl_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorq_m1(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mri(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldw_mrc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mri(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mri(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldl_mrc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shldq_mrc(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxl_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxl_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxl_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sarxq_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shlxq_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::shrxq_rmv(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxl_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::rorxq_rmi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pslld_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psllq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllw_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_g(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpslld_f(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_g(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsllq_f(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psraw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrad_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrld_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psrlq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraw_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlw_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_c(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_d(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_g(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrad_f(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_g(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsraq_f(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_g(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrld_f(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_g(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsrlq_f(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sqrtpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsqrtpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popw_o(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::popq_o(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_m(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_o(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_o(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i8(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushw_i16(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pushq_i32(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::sbbq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_subq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_sbbq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subss_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subsd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::subpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubsw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusb_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::psubusw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubss_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubsd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vsubpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubsw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusb_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpsubusw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpcklpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::unpckhps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpcklpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vunpckhps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhbw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckhqdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklwd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklbw_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpckldq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::punpcklqdq_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhbw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhwd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhdq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckhqdq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklwd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklbw_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpckldq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpunpcklqdq_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_i(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_i_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorb_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorw_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorl_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorq_rm(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxl(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mi_sxb(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorb_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorw_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorl_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::lock_xorq_mr(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorps_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::xorpd_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::pxor_a(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorps_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vxorpd_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
            Self::vpxor_b(i) => i.fmt(f), // cranelift/assembler-x64/meta/src/generate.rs:51
        }
    }
}

/// `pabsb: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x1C [((_64b | compat) & ssse3)] (alternate: avx => vpabsb_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pabsb_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pabsb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pabsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x1c); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pabsb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pabsb_a<R>> for Inst<R> {
    fn from(inst: pabsb_a<R>) -> Self {
        Self::pabsb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpabsb: A(xmm1[w], xmm_m128) => VEX.128.66.0F38.WIG 0x1C [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpabsb_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpabsb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpabsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x1c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpabsb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpabsb_a<R>> for Inst<R> {
    fn from(inst: vpabsb_a<R>) -> Self {
        Self::vpabsb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pabsw: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x1D [((_64b | compat) & ssse3)] (alternate: avx => vpabsw_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pabsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pabsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pabsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x1d); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pabsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pabsw_a<R>> for Inst<R> {
    fn from(inst: pabsw_a<R>) -> Self {
        Self::pabsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpabsw: A(xmm1[w], xmm_m128) => VEX.128.66.0F38.WIG 0x1D [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpabsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpabsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpabsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x1d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpabsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpabsw_a<R>> for Inst<R> {
    fn from(inst: vpabsw_a<R>) -> Self {
        Self::vpabsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pabsd: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x1E [((_64b | compat) & ssse3)] (alternate: avx => vpabsd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pabsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pabsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pabsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x1e); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pabsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pabsd_a<R>> for Inst<R> {
    fn from(inst: pabsd_a<R>) -> Self {
        Self::pabsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpabsd: A(xmm1[w], xmm_m128) => VEX.128.66.0F38.WIG 0x1E [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpabsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpabsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpabsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x1e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpabsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpabsd_a<R>> for Inst<R> {
    fn from(inst: vpabsd_a<R>) -> Self {
        Self::vpabsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpabsd: C(xmm1[w], xmm_m128) => EVEX.128.66.0F38.W0 0x1E /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpabsd_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpabsd_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpabsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = EvexPrefix::two_op(reg, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x1e); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpabsd_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpabsd_c<R>> for Inst<R> {
    fn from(inst: vpabsd_c<R>) -> Self {
        Self::vpabsd_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpabsq: C(xmm1[w], xmm_m128) => EVEX.128.66.0F38.W1 0x1F /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpabsq_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpabsq_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpabsq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = EvexPrefix::two_op(reg, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x1f); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpabsq_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpabsq_c<R>> for Inst<R> {
    fn from(inst: vpabsq_c<R>) -> Self {
        Self::vpabsq_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addb: I(al[rw], imm8) => 0x04 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addb_i<R>> for Inst<R> {
    fn from(inst: addb_i<R>) -> Self {
        Self::addb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addw: I(ax[rw], imm16) => 0x66 + 0x05 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addw_i<R>> for Inst<R> {
    fn from(inst: addw_i<R>) -> Self {
        Self::addw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addl: I(eax[rw], imm32) => 0x05 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addl_i<R>> for Inst<R> {
    fn from(inst: addl_i<R>) -> Self {
        Self::addl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x05 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addq_i_sxl<R>> for Inst<R> {
    fn from(inst: addq_i_sxl<R>) -> Self {
        Self::addq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addb: MI(rm8[rw], imm8) => 0x80 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addb_mi<R>> for Inst<R> {
    fn from(inst: addb_mi<R>) -> Self {
        Self::addb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addw: MI(rm16[rw], imm16) => 0x66 + 0x81 /0 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addw_mi<R>> for Inst<R> {
    fn from(inst: addw_mi<R>) -> Self {
        Self::addw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addl: MI(rm32[rw], imm32) => 0x81 /0 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addl_mi<R>> for Inst<R> {
    fn from(inst: addl_mi<R>) -> Self {
        Self::addl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /0 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addq_mi_sxl<R>> for Inst<R> {
    fn from(inst: addq_mi_sxl<R>) -> Self {
        Self::addq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addl_mi_sxb<R>> for Inst<R> {
    fn from(inst: addl_mi_sxb<R>) -> Self {
        Self::addl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /0 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addq_mi_sxb<R>> for Inst<R> {
    fn from(inst: addq_mi_sxb<R>) -> Self {
        Self::addq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addb: MR(rm8[rw], r8) => 0x00 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addb_mr<R>> for Inst<R> {
    fn from(inst: addb_mr<R>) -> Self {
        Self::addb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addw: MR(rm16[rw], r16) => 0x66 + 0x01 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addw_mr<R>> for Inst<R> {
    fn from(inst: addw_mr<R>) -> Self {
        Self::addw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addl: MR(rm32[rw], r32) => 0x01 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addl_mr<R>> for Inst<R> {
    fn from(inst: addl_mr<R>) -> Self {
        Self::addl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addq: MR(rm64[rw], r64) => REX.W + 0x01 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addq_mr<R>> for Inst<R> {
    fn from(inst: addq_mr<R>) -> Self {
        Self::addq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addb: RM(r8[rw], rm8) => 0x02 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addb_rm<R>> for Inst<R> {
    fn from(inst: addb_rm<R>) -> Self {
        Self::addb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addw: RM(r16[rw], rm16) => 0x66 + 0x03 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addw_rm<R>> for Inst<R> {
    fn from(inst: addw_rm<R>) -> Self {
        Self::addw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addl: RM(r32[rw], rm32) => 0x03 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addl_rm<R>> for Inst<R> {
    fn from(inst: addl_rm<R>) -> Self {
        Self::addl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addq: RM(r64[rw], rm64) => REX.W + 0x03 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addq_rm<R>> for Inst<R> {
    fn from(inst: addq_rm<R>) -> Self {
        Self::addq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcb: I(al[rw], imm8) => 0x14 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcb_i<R>> for Inst<R> {
    fn from(inst: adcb_i<R>) -> Self {
        Self::adcb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcw: I(ax[rw], imm16) => 0x66 + 0x15 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcw_i<R>> for Inst<R> {
    fn from(inst: adcw_i<R>) -> Self {
        Self::adcw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcl: I(eax[rw], imm32) => 0x15 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcl_i<R>> for Inst<R> {
    fn from(inst: adcl_i<R>) -> Self {
        Self::adcl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x15 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcq_i_sxl<R>> for Inst<R> {
    fn from(inst: adcq_i_sxl<R>) -> Self {
        Self::adcq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcb: MI(rm8[rw], imm8) => 0x80 /2 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcb_mi<R>> for Inst<R> {
    fn from(inst: adcb_mi<R>) -> Self {
        Self::adcb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcw: MI(rm16[rw], imm16) => 0x66 + 0x81 /2 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcw_mi<R>> for Inst<R> {
    fn from(inst: adcw_mi<R>) -> Self {
        Self::adcw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcl: MI(rm32[rw], imm32) => 0x81 /2 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcl_mi<R>> for Inst<R> {
    fn from(inst: adcl_mi<R>) -> Self {
        Self::adcl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /2 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcq_mi_sxl<R>> for Inst<R> {
    fn from(inst: adcq_mi_sxl<R>) -> Self {
        Self::adcq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /2 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcl_mi_sxb<R>> for Inst<R> {
    fn from(inst: adcl_mi_sxb<R>) -> Self {
        Self::adcl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /2 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcq_mi_sxb<R>> for Inst<R> {
    fn from(inst: adcq_mi_sxb<R>) -> Self {
        Self::adcq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcb: MR(rm8[rw], r8) => 0x10 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcb_mr<R>> for Inst<R> {
    fn from(inst: adcb_mr<R>) -> Self {
        Self::adcb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcw: MR(rm16[rw], r16) => 0x66 + 0x11 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcw_mr<R>> for Inst<R> {
    fn from(inst: adcw_mr<R>) -> Self {
        Self::adcw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcl: MR(rm32[rw], r32) => 0x11 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcl_mr<R>> for Inst<R> {
    fn from(inst: adcl_mr<R>) -> Self {
        Self::adcl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcq: MR(rm64[rw], r64) => REX.W + 0x11 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcq_mr<R>> for Inst<R> {
    fn from(inst: adcq_mr<R>) -> Self {
        Self::adcq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcb: RM(r8[rw], rm8) => 0x12 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x12); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcb_rm<R>> for Inst<R> {
    fn from(inst: adcb_rm<R>) -> Self {
        Self::adcb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcw: RM(r16[rw], rm16) => 0x66 + 0x13 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x13); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcw_rm<R>> for Inst<R> {
    fn from(inst: adcw_rm<R>) -> Self {
        Self::adcw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcl: RM(r32[rw], rm32) => 0x13 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x13); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcl_rm<R>> for Inst<R> {
    fn from(inst: adcl_rm<R>) -> Self {
        Self::adcl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `adcq: RM(r64[rw], rm64) => REX.W + 0x13 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct adcq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> adcq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("adcq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x13); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for adcq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<adcq_rm<R>> for Inst<R> {
    fn from(inst: adcq_rm<R>) -> Self {
        Self::adcq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addb: MI(m8[rw], imm8) => 0xF0 + 0x80 /0 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addb_mi<R>> for Inst<R> {
    fn from(inst: lock_addb_mi<R>) -> Self {
        Self::lock_addb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /0 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addw_mi<R>> for Inst<R> {
    fn from(inst: lock_addw_mi<R>) -> Self {
        Self::lock_addw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addl: MI(m32[rw], imm32) => 0xF0 + 0x81 /0 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addl_mi<R>> for Inst<R> {
    fn from(inst: lock_addl_mi<R>) -> Self {
        Self::lock_addl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /0 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_addq_mi_sxl<R>) -> Self {
        Self::lock_addq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /0 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_addl_mi_sxb<R>) -> Self {
        Self::lock_addl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /0 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_addq_mi_sxb<R>) -> Self {
        Self::lock_addq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addb: MR(m8[rw], r8) => 0xF0 + 0x00 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addb_mr<R>> for Inst<R> {
    fn from(inst: lock_addb_mr<R>) -> Self {
        Self::lock_addb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x01 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addw_mr<R>> for Inst<R> {
    fn from(inst: lock_addw_mr<R>) -> Self {
        Self::lock_addw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addl: MR(m32[rw], r32) => 0xF0 + 0x01 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addl_mr<R>> for Inst<R> {
    fn from(inst: lock_addl_mr<R>) -> Self {
        Self::lock_addl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_addq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x01 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_addq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_addq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_addq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_addq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_addq_mr<R>> for Inst<R> {
    fn from(inst: lock_addq_mr<R>) -> Self {
        Self::lock_addq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcb: MI(m8[rw], imm8) => 0xF0 + 0x80 /2 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcb_mi<R>> for Inst<R> {
    fn from(inst: lock_adcb_mi<R>) -> Self {
        Self::lock_adcb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /2 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcw_mi<R>> for Inst<R> {
    fn from(inst: lock_adcw_mi<R>) -> Self {
        Self::lock_adcw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcl: MI(m32[rw], imm32) => 0xF0 + 0x81 /2 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcl_mi<R>> for Inst<R> {
    fn from(inst: lock_adcl_mi<R>) -> Self {
        Self::lock_adcl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /2 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_adcq_mi_sxl<R>) -> Self {
        Self::lock_adcq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /2 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_adcl_mi_sxb<R>) -> Self {
        Self::lock_adcl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /2 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_adcq_mi_sxb<R>) -> Self {
        Self::lock_adcq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcb: MR(m8[rw], r8) => 0xF0 + 0x10 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcb_mr<R>> for Inst<R> {
    fn from(inst: lock_adcb_mr<R>) -> Self {
        Self::lock_adcb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x11 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcw_mr<R>> for Inst<R> {
    fn from(inst: lock_adcw_mr<R>) -> Self {
        Self::lock_adcw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcl: MR(m32[rw], r32) => 0xF0 + 0x11 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcl_mr<R>> for Inst<R> {
    fn from(inst: lock_adcl_mr<R>) -> Self {
        Self::lock_adcl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_adcq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x11 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_adcq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_adcq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_adcq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_adcq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_adcq_mr<R>> for Inst<R> {
    fn from(inst: lock_adcq_mr<R>) -> Self {
        Self::lock_adcq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xaddb: MR(m8[rw], r8[rw]) => 0xF0 + 0x0F + 0xC0 /r [(_64b | compat)] custom(Mnemonic | Visit)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xaddb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xaddb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadWriteGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xaddb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        crate::custom::visit::lock_xaddb_mr(self, visitor) // cranelift/assembler-x64/meta/src/generate/inst.rs:187
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xaddb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xaddb_mr<R>> for Inst<R> {
    fn from(inst: lock_xaddb_mr<R>) -> Self {
        Self::lock_xaddb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xaddw: MR(m16[rw], r16[rw]) => 0xF0 + 0x66 + 0x0F + 0xC1 /r [(_64b | compat)] custom(Mnemonic | Visit)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xaddw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xaddw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadWriteGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xaddw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        crate::custom::visit::lock_xaddw_mr(self, visitor) // cranelift/assembler-x64/meta/src/generate/inst.rs:187
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xaddw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xaddw_mr<R>> for Inst<R> {
    fn from(inst: lock_xaddw_mr<R>) -> Self {
        Self::lock_xaddw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xaddl: MR(m32[rw], r32[rw]) => 0xF0 + 0x0F + 0xC1 /r [(_64b | compat)] custom(Mnemonic | Visit)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xaddl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xaddl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadWriteGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xaddl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        crate::custom::visit::lock_xaddl_mr(self, visitor) // cranelift/assembler-x64/meta/src/generate/inst.rs:187
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xaddl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xaddl_mr<R>> for Inst<R> {
    fn from(inst: lock_xaddl_mr<R>) -> Self {
        Self::lock_xaddl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xaddq: MR(m64[rw], r64[rw]) => 0xF0 + REX.W + 0x0F + 0xC1 /r [_64b] custom(Mnemonic | Visit)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xaddq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xaddq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadWriteGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xaddq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        crate::custom::visit::lock_xaddq_mr(self, visitor) // cranelift/assembler-x64/meta/src/generate/inst.rs:187
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xaddq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xaddq_mr<R>> for Inst<R> {
    fn from(inst: lock_xaddq_mr<R>) -> Self {
        Self::lock_xaddq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x58 /r [((_64b | compat) & sse)] (alternate: avx => vaddss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addss_a<R>> for Inst<R> {
    fn from(inst: addss_a<R>) -> Self {
        Self::addss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x58 /r [((_64b | compat) & sse2)] (alternate: avx => vaddsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addsd_a<R>> for Inst<R> {
    fn from(inst: addsd_a<R>) -> Self {
        Self::addsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x58 /r [((_64b | compat) & sse)] (alternate: avx => vaddps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addps_a<R>> for Inst<R> {
    fn from(inst: addps_a<R>) -> Self {
        Self::addps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `addpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x58 /r [((_64b | compat) & sse2)] (alternate: avx => vaddpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct addpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> addpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("addpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for addpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<addpd_a<R>> for Inst<R> {
    fn from(inst: addpd_a<R>) -> Self {
        Self::addpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xFC /r [((_64b | compat) & sse2)] (alternate: avx => vpaddb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xfc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddb_a<R>> for Inst<R> {
    fn from(inst: paddb_a<R>) -> Self {
        Self::paddb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xFD /r [((_64b | compat) & sse2)] (alternate: avx => vpaddw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xfd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddw_a<R>> for Inst<R> {
    fn from(inst: paddw_a<R>) -> Self {
        Self::paddw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xFE /r [((_64b | compat) & sse2)] (alternate: avx => vpaddd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xfe); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddd_a<R>> for Inst<R> {
    fn from(inst: paddd_a<R>) -> Self {
        Self::paddd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD4 /r [((_64b | compat) & sse2)] (alternate: avx => vpaddq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddq_a<R>> for Inst<R> {
    fn from(inst: paddq_a<R>) -> Self {
        Self::paddq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddsb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xEC /r [((_64b | compat) & sse2)] (alternate: avx => vpaddsb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddsb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddsb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xec); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddsb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddsb_a<R>> for Inst<R> {
    fn from(inst: paddsb_a<R>) -> Self {
        Self::paddsb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddsw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xED /r [((_64b | compat) & sse2)] (alternate: avx => vpaddsw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xed); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddsw_a<R>> for Inst<R> {
    fn from(inst: paddsw_a<R>) -> Self {
        Self::paddsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddusb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xDC /r [((_64b | compat) & sse2)] (alternate: avx => vpaddusb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddusb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddusb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddusb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xdc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddusb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddusb_a<R>> for Inst<R> {
    fn from(inst: paddusb_a<R>) -> Self {
        Self::paddusb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `paddusw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xDD /r [((_64b | compat) & sse2)] (alternate: avx => vpaddusw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct paddusw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> paddusw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("paddusw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xdd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for paddusw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<paddusw_a<R>> for Inst<R> {
    fn from(inst: paddusw_a<R>) -> Self {
        Self::paddusw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `phaddw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x01 /r [((_64b | compat) & ssse3)] (alternate: avx => vphaddw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct phaddw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> phaddw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("phaddw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for phaddw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<phaddw_a<R>> for Inst<R> {
    fn from(inst: phaddw_a<R>) -> Self {
        Self::phaddw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `phaddd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x02 /r [((_64b | compat) & ssse3)] (alternate: avx => vphaddd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct phaddd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> phaddd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("phaddd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x2); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for phaddd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<phaddd_a<R>> for Inst<R> {
    fn from(inst: phaddd_a<R>) -> Self {
        Self::phaddd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vaddss: B(xmm1[w], xmm2, xmm_m32) => VEX.128.F3.0F.WIG 0x58 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vaddss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vaddss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vaddss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vaddss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vaddss_b<R>> for Inst<R> {
    fn from(inst: vaddss_b<R>) -> Self {
        Self::vaddss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vaddsd: B(xmm1[w], xmm2, xmm_m64) => VEX.128.F2.0F.WIG 0x58 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vaddsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vaddsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vaddsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vaddsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vaddsd_b<R>> for Inst<R> {
    fn from(inst: vaddsd_b<R>) -> Self {
        Self::vaddsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vaddps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x58 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vaddps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vaddps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vaddps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vaddps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vaddps_b<R>> for Inst<R> {
    fn from(inst: vaddps_b<R>) -> Self {
        Self::vaddps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vaddpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x58 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vaddpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vaddpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vaddpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vaddpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vaddpd_b<R>> for Inst<R> {
    fn from(inst: vaddpd_b<R>) -> Self {
        Self::vaddpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xFC /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xfc); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddb_b<R>> for Inst<R> {
    fn from(inst: vpaddb_b<R>) -> Self {
        Self::vpaddb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xFD /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xfd); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddw_b<R>> for Inst<R> {
    fn from(inst: vpaddw_b<R>) -> Self {
        Self::vpaddw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xFE /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xfe); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddd_b<R>> for Inst<R> {
    fn from(inst: vpaddd_b<R>) -> Self {
        Self::vpaddd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD4 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd4); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddq_b<R>> for Inst<R> {
    fn from(inst: vpaddq_b<R>) -> Self {
        Self::vpaddq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddsb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xEC /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddsb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddsb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xec); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddsb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddsb_b<R>> for Inst<R> {
    fn from(inst: vpaddsb_b<R>) -> Self {
        Self::vpaddsb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddsw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xED /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddsw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddsw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xed); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddsw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddsw_b<R>> for Inst<R> {
    fn from(inst: vpaddsw_b<R>) -> Self {
        Self::vpaddsw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddusb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xDC /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddusb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddusb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddusb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xdc); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddusb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddusb_b<R>> for Inst<R> {
    fn from(inst: vpaddusb_b<R>) -> Self {
        Self::vpaddusb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpaddusw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xDD /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpaddusw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpaddusw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpaddusw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xdd); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpaddusw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpaddusw_b<R>> for Inst<R> {
    fn from(inst: vpaddusw_b<R>) -> Self {
        Self::vpaddusw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vphaddw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x01 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vphaddw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vphaddw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vphaddw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x1); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vphaddw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vphaddw_b<R>> for Inst<R> {
    fn from(inst: vphaddw_b<R>) -> Self {
        Self::vphaddw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vphaddd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x02 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vphaddd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vphaddd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vphaddd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vphaddd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vphaddd_b<R>> for Inst<R> {
    fn from(inst: vphaddd_b<R>) -> Self {
        Self::vphaddd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vaddpd: C(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W1 0x58 /r [((_64b | compat) & avx512vl)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vaddpd_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vaddpd_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vaddpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx512vl() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vaddpd_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vaddpd_c<R>> for Inst<R> {
    fn from(inst: vaddpd_c<R>) -> Self {
        Self::vaddpd_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `palignr: A(xmm1[rw], xmm_m128[align], imm8) => 0x66 + 0x0F + 0x3A 0x0F ib [((_64b | compat) & ssse3)] (alternate: avx => vpalignr_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct palignr_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> palignr_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("palignr") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xf); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for palignr_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<palignr_a<R>> for Inst<R> {
    fn from(inst: palignr_a<R>) -> Self {
        Self::palignr_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpalignr: B(xmm1[w], xmm2, xmm_m128, imm8) => VEX.128.66.0F3A.WIG 0x0F ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpalignr_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpalignr_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpalignr") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpalignr_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpalignr_b<R>> for Inst<R> {
    fn from(inst: vpalignr_b<R>) -> Self {
        Self::vpalignr_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andb: I(al[rw], imm8) => 0x24 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x24); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andb_i<R>> for Inst<R> {
    fn from(inst: andb_i<R>) -> Self {
        Self::andb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andw: I(ax[rw], imm16) => 0x66 + 0x25 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x25); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andw_i<R>> for Inst<R> {
    fn from(inst: andw_i<R>) -> Self {
        Self::andw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andl: I(eax[rw], imm32) => 0x25 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x25); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andl_i<R>> for Inst<R> {
    fn from(inst: andl_i<R>) -> Self {
        Self::andl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x25 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x25); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andq_i_sxl<R>> for Inst<R> {
    fn from(inst: andq_i_sxl<R>) -> Self {
        Self::andq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andb: MI(rm8[rw], imm8) => 0x80 /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andb_mi<R>> for Inst<R> {
    fn from(inst: andb_mi<R>) -> Self {
        Self::andb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andw: MI(rm16[rw], imm16) => 0x66 + 0x81 /4 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andw_mi<R>> for Inst<R> {
    fn from(inst: andw_mi<R>) -> Self {
        Self::andw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andl: MI(rm32[rw], imm32) => 0x81 /4 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andl_mi<R>> for Inst<R> {
    fn from(inst: andl_mi<R>) -> Self {
        Self::andl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /4 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andq_mi_sxl<R>> for Inst<R> {
    fn from(inst: andq_mi_sxl<R>) -> Self {
        Self::andq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andl_mi_sxb<R>> for Inst<R> {
    fn from(inst: andl_mi_sxb<R>) -> Self {
        Self::andl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /4 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andq_mi_sxb<R>> for Inst<R> {
    fn from(inst: andq_mi_sxb<R>) -> Self {
        Self::andq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andb: MR(rm8[rw], r8) => 0x20 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x20); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andb_mr<R>> for Inst<R> {
    fn from(inst: andb_mr<R>) -> Self {
        Self::andb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andw: MR(rm16[rw], r16) => 0x66 + 0x21 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andw_mr<R>> for Inst<R> {
    fn from(inst: andw_mr<R>) -> Self {
        Self::andw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andl: MR(rm32[rw], r32) => 0x21 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andl_mr<R>> for Inst<R> {
    fn from(inst: andl_mr<R>) -> Self {
        Self::andl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andq: MR(rm64[rw], r64) => REX.W + 0x21 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andq_mr<R>> for Inst<R> {
    fn from(inst: andq_mr<R>) -> Self {
        Self::andq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andb: RM(r8[rw], rm8) => 0x22 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andb_rm<R>> for Inst<R> {
    fn from(inst: andb_rm<R>) -> Self {
        Self::andb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andw: RM(r16[rw], rm16) => 0x66 + 0x23 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x23); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andw_rm<R>> for Inst<R> {
    fn from(inst: andw_rm<R>) -> Self {
        Self::andw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andl: RM(r32[rw], rm32) => 0x23 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x23); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andl_rm<R>> for Inst<R> {
    fn from(inst: andl_rm<R>) -> Self {
        Self::andl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andq: RM(r64[rw], rm64) => REX.W + 0x23 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x23); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andq_rm<R>> for Inst<R> {
    fn from(inst: andq_rm<R>) -> Self {
        Self::andq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andnl: RVM(r32a[w], r32b, rm32) => VEX.LZ.0F38.W0 0xF2 [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andnl_rvm<R> where R: Registers {
    pub r32a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andnl_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32a: impl Into<Gpr<R::WriteGpr>>, r32b: impl Into<Gpr<R::ReadGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32a: r32a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32b: r32b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andnl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r32b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr(self.r32b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andnl_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32a = self.r32a.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32b = self.r32b.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32b}, {r32a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andnl_rvm<R>> for Inst<R> {
    fn from(inst: andnl_rvm<R>) -> Self {
        Self::andnl_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andnq: RVM(r64a[w], r64b, rm64) => VEX.LZ.0F38.W1 0xF2 [(_64b & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andnq_rvm<R> where R: Registers {
    pub r64a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andnq_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64a: impl Into<Gpr<R::WriteGpr>>, r64b: impl Into<Gpr<R::ReadGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64a: r64a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64b: r64b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andnq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r64b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr(self.r64b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andnq_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64a = self.r64a.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64b = self.r64b.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64b}, {r64a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andnq_rvm<R>> for Inst<R> {
    fn from(inst: andnq_rvm<R>) -> Self {
        Self::andnq_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andb: MI(m8[rw], imm8) => 0xF0 + 0x80 /4 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andb_mi<R>> for Inst<R> {
    fn from(inst: lock_andb_mi<R>) -> Self {
        Self::lock_andb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /4 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andw_mi<R>> for Inst<R> {
    fn from(inst: lock_andw_mi<R>) -> Self {
        Self::lock_andw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andl: MI(m32[rw], imm32) => 0xF0 + 0x81 /4 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andl_mi<R>> for Inst<R> {
    fn from(inst: lock_andl_mi<R>) -> Self {
        Self::lock_andl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /4 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_andq_mi_sxl<R>) -> Self {
        Self::lock_andq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /4 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_andl_mi_sxb<R>) -> Self {
        Self::lock_andl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /4 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_andq_mi_sxb<R>) -> Self {
        Self::lock_andq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andb: MR(m8[rw], r8) => 0xF0 + 0x20 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x20); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andb_mr<R>> for Inst<R> {
    fn from(inst: lock_andb_mr<R>) -> Self {
        Self::lock_andb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x21 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andw_mr<R>> for Inst<R> {
    fn from(inst: lock_andw_mr<R>) -> Self {
        Self::lock_andw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andl: MR(m32[rw], r32) => 0xF0 + 0x21 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andl_mr<R>> for Inst<R> {
    fn from(inst: lock_andl_mr<R>) -> Self {
        Self::lock_andl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_andq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x21 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_andq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_andq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_andq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_andq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_andq_mr<R>> for Inst<R> {
    fn from(inst: lock_andq_mr<R>) -> Self {
        Self::lock_andq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x54 /r [((_64b | compat) & sse)] (alternate: avx => vandps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x54); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andps_a<R>> for Inst<R> {
    fn from(inst: andps_a<R>) -> Self {
        Self::andps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x54 /r [((_64b | compat) & sse2)] (alternate: avx => vandpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x54); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andpd_a<R>> for Inst<R> {
    fn from(inst: andpd_a<R>) -> Self {
        Self::andpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andnps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x55 /r [((_64b | compat) & sse)] (alternate: avx => vandnps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andnps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andnps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andnps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x55); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andnps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andnps_a<R>> for Inst<R> {
    fn from(inst: andnps_a<R>) -> Self {
        Self::andnps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `andnpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x55 /r [((_64b | compat) & sse2)] (alternate: avx => vandnpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct andnpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> andnpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("andnpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x55); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for andnpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<andnpd_a<R>> for Inst<R> {
    fn from(inst: andnpd_a<R>) -> Self {
        Self::andnpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pand: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xDB /r [((_64b | compat) & sse2)] (alternate: avx => vpand_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pand_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pand_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pand") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xdb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pand_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pand_a<R>> for Inst<R> {
    fn from(inst: pand_a<R>) -> Self {
        Self::pand_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pandn: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xDF /r [((_64b | compat) & sse2)] (alternate: avx => vpandn_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pandn_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pandn_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pandn") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xdf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pandn_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pandn_a<R>> for Inst<R> {
    fn from(inst: pandn_a<R>) -> Self {
        Self::pandn_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vandps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x54 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vandps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vandps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vandps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x54); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vandps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vandps_b<R>> for Inst<R> {
    fn from(inst: vandps_b<R>) -> Self {
        Self::vandps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vandpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x54 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vandpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vandpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vandpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x54); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vandpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vandpd_b<R>> for Inst<R> {
    fn from(inst: vandpd_b<R>) -> Self {
        Self::vandpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vandnps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x55 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vandnps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vandnps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vandnps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x55); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vandnps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vandnps_b<R>> for Inst<R> {
    fn from(inst: vandnps_b<R>) -> Self {
        Self::vandnps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vandnpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x55 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vandnpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vandnpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vandnpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x55); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vandnpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vandnpd_b<R>> for Inst<R> {
    fn from(inst: vandnpd_b<R>) -> Self {
        Self::vandnpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpand: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xDB /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpand_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpand_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpand") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xdb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpand_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpand_b<R>> for Inst<R> {
    fn from(inst: vpand_b<R>) -> Self {
        Self::vpand_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpandn: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xDF /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpandn_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpandn_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpandn") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xdf); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpandn_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpandn_b<R>> for Inst<R> {
    fn from(inst: vpandn_b<R>) -> Self {
        Self::vpandn_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xchgb: RM(r8[rw], m8[rw]) => 0x86 /r [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xchgb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xchgb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, m8: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xchgb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x86); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xchgb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::xchgb_rm(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<xchgb_rm<R>> for Inst<R> {
    fn from(inst: xchgb_rm<R>) -> Self {
        Self::xchgb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xchgw: RM(r16[rw], m16[rw]) => 0x66 + 0x87 /r [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xchgw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xchgw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, m16: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xchgw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x87); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xchgw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::xchgw_rm(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<xchgw_rm<R>> for Inst<R> {
    fn from(inst: xchgw_rm<R>) -> Self {
        Self::xchgw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xchgl: RM(r32[rw], m32[rw]) => 0x87 /r [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xchgl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xchgl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, m32: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xchgl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x87); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xchgl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::xchgl_rm(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<xchgl_rm<R>> for Inst<R> {
    fn from(inst: xchgl_rm<R>) -> Self {
        Self::xchgl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xchgq: RM(r64[rw], m64[rw]) => REX.W + 0x87 /r [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xchgq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xchgq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, m64: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xchgq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x87); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xchgq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::xchgq_rm(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<xchgq_rm<R>> for Inst<R> {
    fn from(inst: xchgq_rm<R>) -> Self {
        Self::xchgq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpxchg16b: M(rax[rw,implicit], rdx[rw,implicit], rbx[implicit], rcx[implicit], m128[rw]) => REX.W + 0x0F + 0xC7 /1 [(_64b & cmpxchg16b)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpxchg16b_m<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rbx: Fixed<R::ReadGpr, { gpr::enc::RBX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rcx: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m128: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpxchg16b_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rdx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rbx: impl Into<Fixed<R::ReadGpr, { gpr::enc::RBX }>>, rcx: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>, m128: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rbx: rbx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rcx: rcx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m128: m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpxchg16b") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m128.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m128.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rbx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rbx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rcx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rcx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_amode(&mut self.m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.cmpxchg16b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::cmpxchg16b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpxchg16b_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rbx = self.rbx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rcx = self.rcx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m128 = self.m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m128} ;; implicit: {rax}, {rdx}, {rbx}, {rcx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpxchg16b_m<R>> for Inst<R> {
    fn from(inst: cmpxchg16b_m<R>) -> Self {
        Self::cmpxchg16b_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_cmpxchg16b: M(rax[rw,implicit], rdx[rw,implicit], rbx[implicit], rcx[implicit], m128[rw]) => 0xF0 + REX.W + 0x0F + 0xC7 /1 [(_64b & cmpxchg16b)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_cmpxchg16b_m<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rbx: Fixed<R::ReadGpr, { gpr::enc::RBX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rcx: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m128: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_cmpxchg16b_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rdx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rbx: impl Into<Fixed<R::ReadGpr, { gpr::enc::RBX }>>, rcx: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>, m128: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rbx: rbx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rcx: rcx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m128: m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_cmpxchg16b_m(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m128.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m128.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rbx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rbx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rcx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rcx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_amode(&mut self.m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.cmpxchg16b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::cmpxchg16b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_cmpxchg16b_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rbx = self.rbx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rcx = self.rcx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m128 = self.m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m128} ;; implicit: {rax}, {rdx}, {rbx}, {rcx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_cmpxchg16b_m<R>> for Inst<R> {
    fn from(inst: lock_cmpxchg16b_m<R>) -> Self {
        Self::lock_cmpxchg16b_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpxchgb: MR(rm8[rw], r8, al[rw,implicit]) => 0x0F + 0xB0 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpxchgb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpxchgb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>, al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpxchgb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpxchgb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8} ;; implicit: {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpxchgb_mr<R>> for Inst<R> {
    fn from(inst: cmpxchgb_mr<R>) -> Self {
        Self::cmpxchgb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpxchgw: MR(rm16[rw], r16, ax[rw,implicit]) => 0x66 + 0x0F + 0xB1 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpxchgw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpxchgw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>, ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpxchgw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpxchgw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16} ;; implicit: {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpxchgw_mr<R>> for Inst<R> {
    fn from(inst: cmpxchgw_mr<R>) -> Self {
        Self::cmpxchgw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpxchgl: MR(rm32[rw], r32, eax[rw,implicit]) => 0x0F + 0xB1 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpxchgl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpxchgl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>, eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpxchgl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpxchgl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32} ;; implicit: {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpxchgl_mr<R>> for Inst<R> {
    fn from(inst: cmpxchgl_mr<R>) -> Self {
        Self::cmpxchgl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpxchgq: MR(rm64[rw], r64, rax[rw,implicit]) => REX.W + 0x0F + 0xB1 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpxchgq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpxchgq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>, rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpxchgq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpxchgq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64} ;; implicit: {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpxchgq_mr<R>> for Inst<R> {
    fn from(inst: cmpxchgq_mr<R>) -> Self {
        Self::cmpxchgq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_cmpxchgb: MR(m8[rw], r8, al[rw,implicit]) => 0xF0 + 0x0F + 0xB0 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_cmpxchgb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_cmpxchgb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>, al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_cmpxchgb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_cmpxchgb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8} ;; implicit: {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_cmpxchgb_mr<R>> for Inst<R> {
    fn from(inst: lock_cmpxchgb_mr<R>) -> Self {
        Self::lock_cmpxchgb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_cmpxchgw: MR(m16[rw], r16, ax[rw,implicit]) => 0xF0 + 0x66 + 0x0F + 0xB1 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_cmpxchgw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_cmpxchgw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>, ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_cmpxchgw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_cmpxchgw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16} ;; implicit: {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_cmpxchgw_mr<R>> for Inst<R> {
    fn from(inst: lock_cmpxchgw_mr<R>) -> Self {
        Self::lock_cmpxchgw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_cmpxchgl: MR(m32[rw], r32, eax[rw,implicit]) => 0xF0 + 0x0F + 0xB1 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_cmpxchgl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_cmpxchgl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>, eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_cmpxchgl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_cmpxchgl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32} ;; implicit: {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_cmpxchgl_mr<R>> for Inst<R> {
    fn from(inst: lock_cmpxchgl_mr<R>) -> Self {
        Self::lock_cmpxchgl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_cmpxchgq: MR(m64[rw], r64, rax[rw,implicit]) => 0xF0 + REX.W + 0x0F + 0xB1 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_cmpxchgq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_cmpxchgq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>, rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_cmpxchgq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_cmpxchgq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64} ;; implicit: {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_cmpxchgq_mr<R>> for Inst<R> {
    fn from(inst: lock_cmpxchgq_mr<R>) -> Self {
        Self::lock_cmpxchgq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pavgb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE0 [((_64b | compat) & sse2)] (alternate: avx => vpavgb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pavgb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pavgb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pavgb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pavgb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pavgb_a<R>> for Inst<R> {
    fn from(inst: pavgb_a<R>) -> Self {
        Self::pavgb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pavgw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE3 [((_64b | compat) & sse2)] (alternate: avx => vpavgw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pavgw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pavgw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pavgw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pavgw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pavgw_a<R>> for Inst<R> {
    fn from(inst: pavgw_a<R>) -> Self {
        Self::pavgw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpavgb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE0 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpavgb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpavgb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpavgb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe0); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpavgb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpavgb_b<R>> for Inst<R> {
    fn from(inst: vpavgb_b<R>) -> Self {
        Self::vpavgb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpavgw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE3 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpavgw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpavgw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpavgw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpavgw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpavgw_b<R>> for Inst<R> {
    fn from(inst: vpavgw_b<R>) -> Self {
        Self::vpavgw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bsfw: RM(r16[w], rm16) => 0x66 + 0x0F + 0xBC /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bsfw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bsfw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bsfw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bsfw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bsfw_rm<R>> for Inst<R> {
    fn from(inst: bsfw_rm<R>) -> Self {
        Self::bsfw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bsfl: RM(r32[w], rm32) => 0x0F + 0xBC /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bsfl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bsfl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bsfl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bsfl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bsfl_rm<R>> for Inst<R> {
    fn from(inst: bsfl_rm<R>) -> Self {
        Self::bsfl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bsfq: RM(r64[w], rm64) => REX.W + 0x0F + 0xBC /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bsfq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bsfq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bsfq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bsfq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bsfq_rm<R>> for Inst<R> {
    fn from(inst: bsfq_rm<R>) -> Self {
        Self::bsfq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bsrw: RM(r16[w], rm16) => 0x66 + 0x0F + 0xBD /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bsrw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bsrw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bsrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bsrw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bsrw_rm<R>> for Inst<R> {
    fn from(inst: bsrw_rm<R>) -> Self {
        Self::bsrw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bsrl: RM(r32[w], rm32) => 0x0F + 0xBD /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bsrl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bsrl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bsrl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bsrl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bsrl_rm<R>> for Inst<R> {
    fn from(inst: bsrl_rm<R>) -> Self {
        Self::bsrl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bsrq: RM(r64[w], rm64) => REX.W + 0x0F + 0xBD /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bsrq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bsrq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bsrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bsrq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bsrq_rm<R>> for Inst<R> {
    fn from(inst: bsrq_rm<R>) -> Self {
        Self::bsrq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `tzcntw: A(r16[w], rm16) => 0xF3 + 0x66 + 0x0F + 0xBC /r [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct tzcntw_a<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> tzcntw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("tzcntw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for tzcntw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<tzcntw_a<R>> for Inst<R> {
    fn from(inst: tzcntw_a<R>) -> Self {
        Self::tzcntw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `tzcntl: A(r32[w], rm32) => 0xF3 + 0x0F + 0xBC /r [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct tzcntl_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> tzcntl_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("tzcntl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for tzcntl_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<tzcntl_a<R>> for Inst<R> {
    fn from(inst: tzcntl_a<R>) -> Self {
        Self::tzcntl_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `tzcntq: A(r64[w], rm64) => 0xF3 + REX.W + 0x0F + 0xBC /r [(_64b & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct tzcntq_a<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> tzcntq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("tzcntq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for tzcntq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<tzcntq_a<R>> for Inst<R> {
    fn from(inst: tzcntq_a<R>) -> Self {
        Self::tzcntq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lzcntw: RM(r16[w], rm16) => 0xF3 + 0x66 + 0x0F + 0xBD /r [((_64b | compat) & lzcnt)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lzcntw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lzcntw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("lzcntw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.lzcnt() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::lzcnt); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lzcntw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lzcntw_rm<R>> for Inst<R> {
    fn from(inst: lzcntw_rm<R>) -> Self {
        Self::lzcntw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lzcntl: RM(r32[w], rm32) => 0xF3 + 0x0F + 0xBD /r [((_64b | compat) & lzcnt)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lzcntl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lzcntl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("lzcntl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.lzcnt() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::lzcnt); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lzcntl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lzcntl_rm<R>> for Inst<R> {
    fn from(inst: lzcntl_rm<R>) -> Self {
        Self::lzcntl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lzcntq: RM(r64[w], rm64) => 0xF3 + REX.W + 0x0F + 0xBD /r [(_64b & lzcnt)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lzcntq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lzcntq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("lzcntq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.lzcnt() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::lzcnt); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lzcntq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lzcntq_rm<R>> for Inst<R> {
    fn from(inst: lzcntq_rm<R>) -> Self {
        Self::lzcntq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popcntw: RM(r16[w], rm16) => 0xF3 + 0x66 + 0x0F + 0xB8 /r [((_64b | compat) & popcnt)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popcntw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popcntw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popcntw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.popcnt() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::popcnt); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popcntw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popcntw_rm<R>> for Inst<R> {
    fn from(inst: popcntw_rm<R>) -> Self {
        Self::popcntw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popcntl: RM(r32[w], rm32) => 0xF3 + 0x0F + 0xB8 /r [((_64b | compat) & popcnt)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popcntl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popcntl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popcntl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.popcnt() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::popcnt); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popcntl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popcntl_rm<R>> for Inst<R> {
    fn from(inst: popcntl_rm<R>) -> Self {
        Self::popcntl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popcntq: RM(r64[w], rm64) => 0xF3 + REX.W + 0x0F + 0xB8 /r [(_64b & popcnt)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popcntq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popcntq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popcntq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.popcnt() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::popcnt); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popcntq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popcntq_rm<R>> for Inst<R> {
    fn from(inst: popcntq_rm<R>) -> Self {
        Self::popcntq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `btw: MR(rm16, r16)[flags:w] => 0x66 + 0x0F + 0xA3 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct btw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> btw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("btw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for btw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<btw_mr<R>> for Inst<R> {
    fn from(inst: btw_mr<R>) -> Self {
        Self::btw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `btl: MR(rm32, r32)[flags:w] => 0x0F + 0xA3 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct btl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> btl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("btl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for btl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<btl_mr<R>> for Inst<R> {
    fn from(inst: btl_mr<R>) -> Self {
        Self::btl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `btq: MR(rm64, r64)[flags:w] => REX.W + 0x0F + 0xA3 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct btq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> btq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("btq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for btq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<btq_mr<R>> for Inst<R> {
    fn from(inst: btq_mr<R>) -> Self {
        Self::btq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `btw: MI(rm16, imm8)[flags:w] => 0x66 + 0x0F + 0xBA /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct btw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> btw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("btw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xba); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for btw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<btw_mi<R>> for Inst<R> {
    fn from(inst: btw_mi<R>) -> Self {
        Self::btw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `btl: MI(rm32, imm8)[flags:w] => 0x0F + 0xBA /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct btl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> btl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("btl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xba); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for btl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<btl_mi<R>> for Inst<R> {
    fn from(inst: btl_mi<R>) -> Self {
        Self::btl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `btq: MI(rm64, imm8)[flags:w] => REX.W + 0x0F + 0xBA /4 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct btq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> btq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("btq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xba); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for btq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<btq_mi<R>> for Inst<R> {
    fn from(inst: btq_mi<R>) -> Self {
        Self::btq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cbtw: ZO(ax[rw,implicit]) => 0x66 + 0x98 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cbtw_zo<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cbtw_zo<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cbtw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x98); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cbtw_zo<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name}  ;; implicit: {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cbtw_zo<R>> for Inst<R> {
    fn from(inst: cbtw_zo<R>) -> Self {
        Self::cbtw_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cwtl: ZO(eax[rw,implicit]) => 0x98 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cwtl_zo<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cwtl_zo<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cwtl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x98); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cwtl_zo<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name}  ;; implicit: {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cwtl_zo<R>> for Inst<R> {
    fn from(inst: cwtl_zo<R>) -> Self {
        Self::cwtl_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cltq: ZO(rax[rw,implicit]) => REX.W + 0x98 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cltq_zo<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cltq_zo<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cltq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x98); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cltq_zo<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name}  ;; implicit: {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cltq_zo<R>> for Inst<R> {
    fn from(inst: cltq_zo<R>) -> Self {
        Self::cltq_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cwtd: ZO(dx[w,implicit], ax[implicit]) => 0x66 + 0x99 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cwtd_zo<R> where R: Registers {
    pub dx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub ax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cwtd_zo<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(dx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, ax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            dx: dx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cwtd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.dx.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x99); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.dx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.dx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cwtd_zo<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let dx = self.dx.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name}  ;; implicit: {dx}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cwtd_zo<R>> for Inst<R> {
    fn from(inst: cwtd_zo<R>) -> Self {
        Self::cwtd_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cltd: ZO(edx[w,implicit], eax[implicit]) => 0x99 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cltd_zo<R> where R: Registers {
    pub edx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub eax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cltd_zo<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(edx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, eax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            edx: edx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cltd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.edx.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x99); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.edx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.edx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cltd_zo<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let edx = self.edx.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name}  ;; implicit: {edx}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cltd_zo<R>> for Inst<R> {
    fn from(inst: cltd_zo<R>) -> Self {
        Self::cltd_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cqto: ZO(rdx[w,implicit], rax[implicit]) => REX.W + 0x99 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cqto_zo<R> where R: Registers {
    pub rdx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cqto_zo<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rdx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>) -> Self {
        Self {
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cqto") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rdx.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x99); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cqto_zo<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name}  ;; implicit: {rdx}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cqto_zo<R>> for Inst<R> {
    fn from(inst: cqto_zo<R>) -> Self {
        Self::cqto_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bswapl: O(r32[rw]) => 0x0F + 0xC8 +rd [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bswapl_o<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bswapl_o<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bswapl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:157
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:158
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        let low_bits = self.r32.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0xc8 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bswapl_o<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bswapl_o<R>> for Inst<R> {
    fn from(inst: bswapl_o<R>) -> Self {
        Self::bswapl_o(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bswapq: O(r64[rw]) => REX.W + 0x0F + 0xC8 +ro [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bswapq_o<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bswapq_o<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bswapq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:157
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:158
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        let low_bits = self.r64.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0xc8 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bswapq_o<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bswapq_o<R>> for Inst<R> {
    fn from(inst: bswapq_o<R>) -> Self {
        Self::bswapq_o(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blsrl: VM(r32[w], rm32) => VEX.LZ.0F38.W0 0xF3 /1 [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blsrl_vm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blsrl_vm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blsrl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blsrl_vm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blsrl_vm<R>> for Inst<R> {
    fn from(inst: blsrl_vm<R>) -> Self {
        Self::blsrl_vm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blsrq: VM(r64[w], rm64) => VEX.LZ.0F38.W1 0xF3 /1 [(_64b & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blsrq_vm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blsrq_vm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blsrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blsrq_vm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blsrq_vm<R>> for Inst<R> {
    fn from(inst: blsrq_vm<R>) -> Self {
        Self::blsrq_vm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blsmskl: VM(r32[w], rm32) => VEX.LZ.0F38.W0 0xF3 /2 [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blsmskl_vm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blsmskl_vm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blsmskl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blsmskl_vm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blsmskl_vm<R>> for Inst<R> {
    fn from(inst: blsmskl_vm<R>) -> Self {
        Self::blsmskl_vm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blsmskq: VM(r64[w], rm64) => VEX.LZ.0F38.W1 0xF3 /2 [(_64b & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blsmskq_vm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blsmskq_vm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blsmskq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blsmskq_vm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blsmskq_vm<R>> for Inst<R> {
    fn from(inst: blsmskq_vm<R>) -> Self {
        Self::blsmskq_vm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blsil: VM(r32[w], rm32) => VEX.LZ.0F38.W0 0xF3 /3 [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blsil_vm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blsil_vm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blsil") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blsil_vm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blsil_vm<R>> for Inst<R> {
    fn from(inst: blsil_vm<R>) -> Self {
        Self::blsil_vm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blsiq: VM(r64[w], rm64) => VEX.LZ.0F38.W1 0xF3 /3 [((_64b | compat) & bmi1)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blsiq_vm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blsiq_vm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blsiq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi1() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi1); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blsiq_vm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blsiq_vm<R>> for Inst<R> {
    fn from(inst: blsiq_vm<R>) -> Self {
        Self::blsiq_vm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bzhil: RMV(r32a[w], rm32, r32b) => VEX.LZ.0F38.W0 0xF5 [((_64b | compat) & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bzhil_rmv<R> where R: Registers {
    pub r32a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bzhil_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32a: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r32a: r32a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32b: r32b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bzhil") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r32b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf5); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bzhil_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32a = self.r32a.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32b = self.r32b.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32b}, {rm32}, {r32a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bzhil_rmv<R>> for Inst<R> {
    fn from(inst: bzhil_rmv<R>) -> Self {
        Self::bzhil_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `bzhiq: RMV(r64a[w], rm64, r64b) => VEX.LZ.0F38.W1 0xF5 [(_64b & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct bzhiq_rmv<R> where R: Registers {
    pub r64a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> bzhiq_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64a: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r64a: r64a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64b: r64b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("bzhiq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r64b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf5); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for bzhiq_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64a = self.r64a.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64b = self.r64b.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64b}, {rm64}, {r64a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<bzhiq_rmv<R>> for Inst<R> {
    fn from(inst: bzhiq_rmv<R>) -> Self {
        Self::bzhiq_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpopcntb: A(xmm1[w], xmm_m128) => EVEX.128.66.0F38.W0 0x54 /r [(((_64b | compat) & avx512vl) & avx512bitalg)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpopcntb_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpopcntb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpopcntb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = EvexPrefix::two_op(reg, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x54); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512bitalg() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512bitalg); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpopcntb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpopcntb_a<R>> for Inst<R> {
    fn from(inst: vpopcntb_a<R>) -> Self {
        Self::vpopcntb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpopcntw: A(xmm1[w], xmm_m128) => EVEX.128.66.0F38.W1 0x54 /r [(((_64b | compat) & avx512vl) & avx512bitalg)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpopcntw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpopcntw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpopcntw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = EvexPrefix::two_op(reg, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x54); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512bitalg() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512bitalg); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpopcntw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpopcntw_a<R>> for Inst<R> {
    fn from(inst: vpopcntw_a<R>) -> Self {
        Self::vpopcntw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovaw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x47 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovaw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovaw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovaw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x47); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovaw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovaw_rm<R>> for Inst<R> {
    fn from(inst: cmovaw_rm<R>) -> Self {
        Self::cmovaw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmoval: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x47 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmoval_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmoval_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmoval") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x47); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmoval_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmoval_rm<R>> for Inst<R> {
    fn from(inst: cmoval_rm<R>) -> Self {
        Self::cmoval_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovaq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x47 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovaq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovaq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovaq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x47); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovaq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovaq_rm<R>> for Inst<R> {
    fn from(inst: cmovaq_rm<R>) -> Self {
        Self::cmovaq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovaew: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x43 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovaew_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovaew_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovaew") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x43); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovaew_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovaew_rm<R>> for Inst<R> {
    fn from(inst: cmovaew_rm<R>) -> Self {
        Self::cmovaew_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovael: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x43 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovael_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovael_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovael") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x43); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovael_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovael_rm<R>> for Inst<R> {
    fn from(inst: cmovael_rm<R>) -> Self {
        Self::cmovael_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovaeq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x43 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovaeq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovaeq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovaeq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x43); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovaeq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovaeq_rm<R>> for Inst<R> {
    fn from(inst: cmovaeq_rm<R>) -> Self {
        Self::cmovaeq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovbw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x42 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovbw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovbw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x42); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovbw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovbw_rm<R>> for Inst<R> {
    fn from(inst: cmovbw_rm<R>) -> Self {
        Self::cmovbw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovbl: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x42 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovbl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovbl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x42); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovbl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovbl_rm<R>> for Inst<R> {
    fn from(inst: cmovbl_rm<R>) -> Self {
        Self::cmovbl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovbq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x42 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovbq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovbq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x42); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovbq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovbq_rm<R>> for Inst<R> {
    fn from(inst: cmovbq_rm<R>) -> Self {
        Self::cmovbq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovbew: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x46 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovbew_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovbew_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovbew") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x46); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovbew_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovbew_rm<R>> for Inst<R> {
    fn from(inst: cmovbew_rm<R>) -> Self {
        Self::cmovbew_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovbel: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x46 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovbel_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovbel_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovbel") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x46); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovbel_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovbel_rm<R>> for Inst<R> {
    fn from(inst: cmovbel_rm<R>) -> Self {
        Self::cmovbel_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovbeq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x46 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovbeq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovbeq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovbeq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x46); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovbeq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovbeq_rm<R>> for Inst<R> {
    fn from(inst: cmovbeq_rm<R>) -> Self {
        Self::cmovbeq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovew: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x44 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovew_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovew_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovew") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x44); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovew_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovew_rm<R>> for Inst<R> {
    fn from(inst: cmovew_rm<R>) -> Self {
        Self::cmovew_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovel: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x44 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovel_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovel_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovel") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x44); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovel_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovel_rm<R>> for Inst<R> {
    fn from(inst: cmovel_rm<R>) -> Self {
        Self::cmovel_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmoveq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x44 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmoveq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmoveq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmoveq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x44); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmoveq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmoveq_rm<R>> for Inst<R> {
    fn from(inst: cmoveq_rm<R>) -> Self {
        Self::cmoveq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovgw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x4F /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovgw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovgw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovgw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovgw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovgw_rm<R>> for Inst<R> {
    fn from(inst: cmovgw_rm<R>) -> Self {
        Self::cmovgw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovgl: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x4F /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovgl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovgl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovgl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovgl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovgl_rm<R>> for Inst<R> {
    fn from(inst: cmovgl_rm<R>) -> Self {
        Self::cmovgl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovgq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x4F /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovgq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovgq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovgq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovgq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovgq_rm<R>> for Inst<R> {
    fn from(inst: cmovgq_rm<R>) -> Self {
        Self::cmovgq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovgew: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x4D /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovgew_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovgew_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovgew") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovgew_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovgew_rm<R>> for Inst<R> {
    fn from(inst: cmovgew_rm<R>) -> Self {
        Self::cmovgew_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovgel: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x4D /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovgel_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovgel_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovgel") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovgel_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovgel_rm<R>> for Inst<R> {
    fn from(inst: cmovgel_rm<R>) -> Self {
        Self::cmovgel_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovgeq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x4D /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovgeq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovgeq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovgeq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovgeq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovgeq_rm<R>> for Inst<R> {
    fn from(inst: cmovgeq_rm<R>) -> Self {
        Self::cmovgeq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovlw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x4C /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovlw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovlw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovlw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovlw_rm<R>> for Inst<R> {
    fn from(inst: cmovlw_rm<R>) -> Self {
        Self::cmovlw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovll: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x4C /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovll_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovll_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovll_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovll_rm<R>> for Inst<R> {
    fn from(inst: cmovll_rm<R>) -> Self {
        Self::cmovll_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovlq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x4C /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovlq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovlq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovlq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovlq_rm<R>> for Inst<R> {
    fn from(inst: cmovlq_rm<R>) -> Self {
        Self::cmovlq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovlew: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x4E /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovlew_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovlew_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovlew") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovlew_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovlew_rm<R>> for Inst<R> {
    fn from(inst: cmovlew_rm<R>) -> Self {
        Self::cmovlew_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovlel: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x4E /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovlel_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovlel_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovlel") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovlel_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovlel_rm<R>> for Inst<R> {
    fn from(inst: cmovlel_rm<R>) -> Self {
        Self::cmovlel_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovleq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x4E /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovleq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovleq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovleq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovleq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovleq_rm<R>> for Inst<R> {
    fn from(inst: cmovleq_rm<R>) -> Self {
        Self::cmovleq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnew: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x45 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnew_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnew_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnew") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x45); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnew_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnew_rm<R>> for Inst<R> {
    fn from(inst: cmovnew_rm<R>) -> Self {
        Self::cmovnew_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnel: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x45 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnel_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnel_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnel") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x45); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnel_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnel_rm<R>> for Inst<R> {
    fn from(inst: cmovnel_rm<R>) -> Self {
        Self::cmovnel_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovneq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x45 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovneq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovneq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovneq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x45); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovneq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovneq_rm<R>> for Inst<R> {
    fn from(inst: cmovneq_rm<R>) -> Self {
        Self::cmovneq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnow: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x41 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnow_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnow_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnow") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x41); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnow_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnow_rm<R>> for Inst<R> {
    fn from(inst: cmovnow_rm<R>) -> Self {
        Self::cmovnow_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnol: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x41 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnol_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnol_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnol") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x41); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnol_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnol_rm<R>> for Inst<R> {
    fn from(inst: cmovnol_rm<R>) -> Self {
        Self::cmovnol_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnoq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x41 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnoq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnoq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnoq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x41); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnoq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnoq_rm<R>> for Inst<R> {
    fn from(inst: cmovnoq_rm<R>) -> Self {
        Self::cmovnoq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnpw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x4B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnpw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnpw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnpw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnpw_rm<R>> for Inst<R> {
    fn from(inst: cmovnpw_rm<R>) -> Self {
        Self::cmovnpw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnpl: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x4B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnpl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnpl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnpl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnpl_rm<R>> for Inst<R> {
    fn from(inst: cmovnpl_rm<R>) -> Self {
        Self::cmovnpl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnpq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x4B /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnpq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnpq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnpq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnpq_rm<R>> for Inst<R> {
    fn from(inst: cmovnpq_rm<R>) -> Self {
        Self::cmovnpq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnsw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x49 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnsw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnsw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x49); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnsw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnsw_rm<R>> for Inst<R> {
    fn from(inst: cmovnsw_rm<R>) -> Self {
        Self::cmovnsw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnsl: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x49 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnsl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnsl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnsl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x49); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnsl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnsl_rm<R>> for Inst<R> {
    fn from(inst: cmovnsl_rm<R>) -> Self {
        Self::cmovnsl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovnsq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x49 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovnsq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovnsq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovnsq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x49); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovnsq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovnsq_rm<R>> for Inst<R> {
    fn from(inst: cmovnsq_rm<R>) -> Self {
        Self::cmovnsq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovow: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x40 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovow_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovow_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovow") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovow_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovow_rm<R>> for Inst<R> {
    fn from(inst: cmovow_rm<R>) -> Self {
        Self::cmovow_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovol: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x40 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovol_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovol_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovol") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovol_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovol_rm<R>> for Inst<R> {
    fn from(inst: cmovol_rm<R>) -> Self {
        Self::cmovol_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovoq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x40 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovoq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovoq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovoq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovoq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovoq_rm<R>> for Inst<R> {
    fn from(inst: cmovoq_rm<R>) -> Self {
        Self::cmovoq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovpw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x4A /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovpw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovpw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovpw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovpw_rm<R>> for Inst<R> {
    fn from(inst: cmovpw_rm<R>) -> Self {
        Self::cmovpw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovpl: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x4A /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovpl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovpl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovpl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovpl_rm<R>> for Inst<R> {
    fn from(inst: cmovpl_rm<R>) -> Self {
        Self::cmovpl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovpq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x4A /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovpq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovpq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x4a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovpq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovpq_rm<R>> for Inst<R> {
    fn from(inst: cmovpq_rm<R>) -> Self {
        Self::cmovpq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovsw: RM(r16[rw], rm16)[flags:r] => 0x66 + 0x0F + 0x48 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovsw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovsw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x48); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovsw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovsw_rm<R>> for Inst<R> {
    fn from(inst: cmovsw_rm<R>) -> Self {
        Self::cmovsw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovsl: RM(r32[rw], rm32)[flags:r] => 0x0F + 0x48 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovsl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovsl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovsl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x48); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovsl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovsl_rm<R>> for Inst<R> {
    fn from(inst: cmovsl_rm<R>) -> Self {
        Self::cmovsl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmovsq: RM(r64[rw], rm64)[flags:r] => REX.W + 0x0F + 0x48 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmovsq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmovsq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmovsq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x48); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmovsq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmovsq_rm<R>> for Inst<R> {
    fn from(inst: cmovsq_rm<R>) -> Self {
        Self::cmovsq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpb: I(al, imm8)[flags:w] => 0x3C ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpb_i<R> where R: Registers {
    pub al: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpb_i<R>> for Inst<R> {
    fn from(inst: cmpb_i<R>) -> Self {
        Self::cmpb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpw: I(ax, imm16)[flags:w] => 0x66 + 0x3D iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpw_i<R>> for Inst<R> {
    fn from(inst: cmpw_i<R>) -> Self {
        Self::cmpw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpl: I(eax, imm32)[flags:w] => 0x3D id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpl_i<R>> for Inst<R> {
    fn from(inst: cmpl_i<R>) -> Self {
        Self::cmpl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpq: I(rax, imm32[sxq])[flags:w] => REX.W + 0x3D id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpq_i<R> where R: Registers {
    pub rax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpq_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpq_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpq_i<R>> for Inst<R> {
    fn from(inst: cmpq_i<R>) -> Self {
        Self::cmpq_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpb: MI(rm8, imm8)[flags:w] => 0x80 /7 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpb_mi<R>> for Inst<R> {
    fn from(inst: cmpb_mi<R>) -> Self {
        Self::cmpb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpw: MI(rm16, imm16)[flags:w] => 0x66 + 0x81 /7 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpw_mi<R>> for Inst<R> {
    fn from(inst: cmpw_mi<R>) -> Self {
        Self::cmpw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpl: MI(rm32, imm32)[flags:w] => 0x81 /7 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpl_mi<R>> for Inst<R> {
    fn from(inst: cmpl_mi<R>) -> Self {
        Self::cmpl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpq: MI(rm64, imm32[sxq])[flags:w] => REX.W + 0x81 /7 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpq_mi<R>> for Inst<R> {
    fn from(inst: cmpq_mi<R>) -> Self {
        Self::cmpq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpw: MI_SXB(rm16, imm8[sxw])[flags:w] => 0x66 + 0x83 /7 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpw_mi_sxb<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpw_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpw_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendWord); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpw_mi_sxb<R>> for Inst<R> {
    fn from(inst: cmpw_mi_sxb<R>) -> Self {
        Self::cmpw_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpl: MI_SXB(rm32, imm8[sxl])[flags:w] => 0x83 /7 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpl_mi_sxb<R>> for Inst<R> {
    fn from(inst: cmpl_mi_sxb<R>) -> Self {
        Self::cmpl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpq: MI_SXB(rm64, imm8[sxq])[flags:w] => REX.W + 0x83 /7 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpq_mi_sxb<R>> for Inst<R> {
    fn from(inst: cmpq_mi_sxb<R>) -> Self {
        Self::cmpq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpb: MR(rm8, r8)[flags:w] => 0x38 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpb_mr<R>> for Inst<R> {
    fn from(inst: cmpb_mr<R>) -> Self {
        Self::cmpb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpw: MR(rm16, r16)[flags:w] => 0x66 + 0x39 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x39); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpw_mr<R>> for Inst<R> {
    fn from(inst: cmpw_mr<R>) -> Self {
        Self::cmpw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpl: MR(rm32, r32)[flags:w] => 0x39 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x39); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpl_mr<R>> for Inst<R> {
    fn from(inst: cmpl_mr<R>) -> Self {
        Self::cmpl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpq: MR(rm64, r64)[flags:w] => REX.W + 0x39 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x39); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpq_mr<R>> for Inst<R> {
    fn from(inst: cmpq_mr<R>) -> Self {
        Self::cmpq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpb: RM(r8, rm8)[flags:w] => 0x3A [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpb_rm<R>> for Inst<R> {
    fn from(inst: cmpb_rm<R>) -> Self {
        Self::cmpb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpw: RM(r16, rm16)[flags:w] => 0x66 + 0x3B [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpw_rm<R>> for Inst<R> {
    fn from(inst: cmpw_rm<R>) -> Self {
        Self::cmpw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpl: RM(r32, rm32)[flags:w] => 0x3B [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpl_rm<R>> for Inst<R> {
    fn from(inst: cmpl_rm<R>) -> Self {
        Self::cmpl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpq: RM(r64, rm64)[flags:w] => REX.W + 0x3B [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x3b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cmpq_rm<R>> for Inst<R> {
    fn from(inst: cmpq_rm<R>) -> Self {
        Self::cmpq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testb: I(al, imm8)[flags:w] => 0xA8 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testb_i<R> where R: Registers {
    pub al: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xa8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testb_i<R>> for Inst<R> {
    fn from(inst: testb_i<R>) -> Self {
        Self::testb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testw: I(ax, imm16)[flags:w] => 0x66 + 0xA9 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xa9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testw_i<R>> for Inst<R> {
    fn from(inst: testw_i<R>) -> Self {
        Self::testw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testl: I(eax, imm32)[flags:w] => 0xA9 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xa9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testl_i<R>> for Inst<R> {
    fn from(inst: testl_i<R>) -> Self {
        Self::testl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testq: I(rax, imm32[sxq])[flags:w] => REX.W + 0xA9 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testq_i<R> where R: Registers {
    pub rax: Fixed<R::ReadGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testq_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xa9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testq_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testq_i<R>> for Inst<R> {
    fn from(inst: testq_i<R>) -> Self {
        Self::testq_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testb: MI(rm8, imm8)[flags:w] => 0xF6 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testb_mi<R>> for Inst<R> {
    fn from(inst: testb_mi<R>) -> Self {
        Self::testb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testw: MI(rm16, imm16)[flags:w] => 0x66 + 0xF7 /0 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testw_mi<R>> for Inst<R> {
    fn from(inst: testw_mi<R>) -> Self {
        Self::testw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testl: MI(rm32, imm32)[flags:w] => 0xF7 /0 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testl_mi<R>> for Inst<R> {
    fn from(inst: testl_mi<R>) -> Self {
        Self::testl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testq: MI(rm64, imm32[sxq])[flags:w] => REX.W + 0xF7 /0 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testq_mi<R>> for Inst<R> {
    fn from(inst: testq_mi<R>) -> Self {
        Self::testq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testb: MR(rm8, r8)[flags:w] => 0x84 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x84); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testb_mr<R>> for Inst<R> {
    fn from(inst: testb_mr<R>) -> Self {
        Self::testb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testw: MR(rm16, r16)[flags:w] => 0x66 + 0x85 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x85); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testw_mr<R>> for Inst<R> {
    fn from(inst: testw_mr<R>) -> Self {
        Self::testw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testl: MR(rm32, r32)[flags:w] => 0x85 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x85); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testl_mr<R>> for Inst<R> {
    fn from(inst: testl_mr<R>) -> Self {
        Self::testl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `testq: MR(rm64, r64)[flags:w] => REX.W + 0x85 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct testq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> testq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("testq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x85); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for testq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<testq_mr<R>> for Inst<R> {
    fn from(inst: testq_mr<R>) -> Self {
        Self::testq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `ptest: RM(xmm1, xmm_m128[align])[flags:w] => 0x66 + 0x0F + 0x38 0x17 /r [((_64b | compat) & sse41)] (alternate: avx => vptest_rm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct ptest_rm<R> where R: Registers {
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> ptest_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("ptest") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x17); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for ptest_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<ptest_rm<R>> for Inst<R> {
    fn from(inst: ptest_rm<R>) -> Self {
        Self::ptest_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vptest: RM(xmm1, xmm_m128)[flags:w] => VEX.128.66.0F38.WIG 0x17 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vptest_rm<R> where R: Registers {
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vptest_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vptest") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x17); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vptest_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vptest_rm<R>> for Inst<R> {
    fn from(inst: vptest_rm<R>) -> Self {
        Self::vptest_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `ucomiss: A(xmm1, xmm_m32)[flags:w] => 0x0F + 0x2E /r [((_64b | compat) & sse)] (alternate: avx => vucomiss_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct ucomiss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> ucomiss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("ucomiss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for ucomiss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<ucomiss_a<R>> for Inst<R> {
    fn from(inst: ucomiss_a<R>) -> Self {
        Self::ucomiss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `ucomisd: A(xmm1, xmm_m64)[flags:w] => 0x66 + 0x0F + 0x2E /r [((_64b | compat) & sse2)] (alternate: avx => vucomisd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct ucomisd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> ucomisd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("ucomisd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for ucomisd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<ucomisd_a<R>> for Inst<R> {
    fn from(inst: ucomisd_a<R>) -> Self {
        Self::ucomisd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vucomiss: A(xmm2, xmm_m32)[flags:w] => VEX.LIG.0F.WIG 0x2E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vucomiss_a<R> where R: Registers {
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vucomiss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vucomiss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vucomiss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vucomiss_a<R>> for Inst<R> {
    fn from(inst: vucomiss_a<R>) -> Self {
        Self::vucomiss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vucomisd: A(xmm2, xmm_m64)[flags:w] => VEX.LIG.66.0F.WIG 0x2E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vucomisd_a<R> where R: Registers {
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vucomisd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vucomisd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vucomisd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vucomisd_a<R>> for Inst<R> {
    fn from(inst: vucomisd_a<R>) -> Self {
        Self::vucomisd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpss: A(xmm1[rw], xmm_m32, imm8) => 0xF3 + 0x0F + 0xC2 /r ib [((_64b | compat) & sse)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::cmpss_a(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<cmpss_a<R>> for Inst<R> {
    fn from(inst: cmpss_a<R>) -> Self {
        Self::cmpss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpsd: A(xmm1[rw], xmm_m64, imm8) => 0xF2 + 0x0F + 0xC2 /r ib [((_64b | compat) & sse2)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::cmpsd_a(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<cmpsd_a<R>> for Inst<R> {
    fn from(inst: cmpsd_a<R>) -> Self {
        Self::cmpsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmpps: A(xmm1[rw], xmm_m128, imm8) => 0x0F + 0xC2 /r ib [((_64b | compat) & sse)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmpps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmpps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmpps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmpps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::cmpps_a(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<cmpps_a<R>> for Inst<R> {
    fn from(inst: cmpps_a<R>) -> Self {
        Self::cmpps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cmppd: A(xmm1[rw], xmm_m128, imm8) => 0x66 + 0x0F + 0xC2 /r ib [((_64b | compat) & sse2)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cmppd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cmppd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cmppd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cmppd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::cmppd_a(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<cmppd_a<R>> for Inst<R> {
    fn from(inst: cmppd_a<R>) -> Self {
        Self::cmppd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcmpss: B(xmm1[w], xmm2, xmm_m32, imm8) => VEX.LIG.F3.0F.WIG 0xC2 /r ib [((_64b | compat) & avx)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcmpss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcmpss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcmpss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcmpss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::vcmpss_b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<vcmpss_b<R>> for Inst<R> {
    fn from(inst: vcmpss_b<R>) -> Self {
        Self::vcmpss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcmpsd: B(xmm1[w], xmm2, xmm_m64, imm8) => VEX.LIG.F2.0F.WIG 0xC2 /r ib [((_64b | compat) & avx)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcmpsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcmpsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcmpsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcmpsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::vcmpsd_b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<vcmpsd_b<R>> for Inst<R> {
    fn from(inst: vcmpsd_b<R>) -> Self {
        Self::vcmpsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcmpps: B(xmm1[w], xmm2, xmm_m128, imm8) => VEX.128.0F.WIG 0xC2 /r ib [((_64b | compat) & avx)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcmpps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcmpps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcmpps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcmpps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::vcmpps_b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<vcmpps_b<R>> for Inst<R> {
    fn from(inst: vcmpps_b<R>) -> Self {
        Self::vcmpps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcmppd: B(xmm1[w], xmm2, xmm_m128, imm8) => VEX.128.66.0F.WIG 0xC2 /r ib [((_64b | compat) & avx)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcmppd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcmppd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcmppd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcmppd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::vcmppd_b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<vcmppd_b<R>> for Inst<R> {
    fn from(inst: vcmppd_b<R>) -> Self {
        Self::vcmppd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpeqb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x74 [((_64b | compat) & sse2)] (alternate: avx => vpcmpeqb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpeqb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpeqb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpeqb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x74); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpeqb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpeqb_a<R>> for Inst<R> {
    fn from(inst: pcmpeqb_a<R>) -> Self {
        Self::pcmpeqb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpeqw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x75 [((_64b | compat) & sse2)] (alternate: avx => vpcmpeqw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpeqw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpeqw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpeqw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x75); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpeqw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpeqw_a<R>> for Inst<R> {
    fn from(inst: pcmpeqw_a<R>) -> Self {
        Self::pcmpeqw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpeqd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x76 [((_64b | compat) & sse2)] (alternate: avx => vpcmpeqd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpeqd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpeqd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpeqd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x76); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpeqd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpeqd_a<R>> for Inst<R> {
    fn from(inst: pcmpeqd_a<R>) -> Self {
        Self::pcmpeqd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpeqq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x29 [((_64b | compat) & sse41)] (alternate: avx => vpcmpeqq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpeqq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpeqq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpeqq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpeqq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpeqq_a<R>> for Inst<R> {
    fn from(inst: pcmpeqq_a<R>) -> Self {
        Self::pcmpeqq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpgtb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x64 [((_64b | compat) & sse2)] (alternate: avx => vpcmpgtb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpgtb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpgtb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpgtb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x64); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpgtb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpgtb_a<R>> for Inst<R> {
    fn from(inst: pcmpgtb_a<R>) -> Self {
        Self::pcmpgtb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpgtw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x65 [((_64b | compat) & sse2)] (alternate: avx => vpcmpgtw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpgtw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpgtw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpgtw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x65); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpgtw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpgtw_a<R>> for Inst<R> {
    fn from(inst: pcmpgtw_a<R>) -> Self {
        Self::pcmpgtw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpgtd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x66 [((_64b | compat) & sse2)] (alternate: avx => vpcmpgtd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpgtd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpgtd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpgtd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpgtd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpgtd_a<R>> for Inst<R> {
    fn from(inst: pcmpgtd_a<R>) -> Self {
        Self::pcmpgtd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pcmpgtq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x37 [((_64b | compat) & sse42)] (alternate: avx => vpcmpgtq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pcmpgtq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pcmpgtq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pcmpgtq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x37); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse42() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse42); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pcmpgtq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pcmpgtq_a<R>> for Inst<R> {
    fn from(inst: pcmpgtq_a<R>) -> Self {
        Self::pcmpgtq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpeqb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x74 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpeqb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpeqb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpeqb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x74); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpeqb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpeqb_b<R>> for Inst<R> {
    fn from(inst: vpcmpeqb_b<R>) -> Self {
        Self::vpcmpeqb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpeqw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x75 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpeqw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpeqw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpeqw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x75); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpeqw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpeqw_b<R>> for Inst<R> {
    fn from(inst: vpcmpeqw_b<R>) -> Self {
        Self::vpcmpeqw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpeqd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x76 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpeqd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpeqd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpeqd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x76); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpeqd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpeqd_b<R>> for Inst<R> {
    fn from(inst: vpcmpeqd_b<R>) -> Self {
        Self::vpcmpeqd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpeqq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x29 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpeqq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpeqq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpeqq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpeqq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpeqq_b<R>> for Inst<R> {
    fn from(inst: vpcmpeqq_b<R>) -> Self {
        Self::vpcmpeqq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpgtb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x64 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpgtb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpgtb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpgtb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x64); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpgtb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpgtb_b<R>> for Inst<R> {
    fn from(inst: vpcmpgtb_b<R>) -> Self {
        Self::vpcmpgtb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpgtw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x65 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpgtw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpgtw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpgtw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x65); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpgtw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpgtw_b<R>> for Inst<R> {
    fn from(inst: vpcmpgtw_b<R>) -> Self {
        Self::vpcmpgtw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpgtd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x66 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpgtd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpgtd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpgtd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpgtd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpgtd_b<R>> for Inst<R> {
    fn from(inst: vpcmpgtd_b<R>) -> Self {
        Self::vpcmpgtd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpcmpgtq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x37 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpcmpgtq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpcmpgtq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpcmpgtq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x37); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpcmpgtq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpcmpgtq_b<R>> for Inst<R> {
    fn from(inst: vpcmpgtq_b<R>) -> Self {
        Self::vpcmpgtq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtps2pd: A(xmm1[w], xmm_m64) => 0x0F + 0x5A /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtps2pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtps2pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtps2pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtps2pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtps2pd_a<R>> for Inst<R> {
    fn from(inst: cvtps2pd_a<R>) -> Self {
        Self::cvtps2pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvttps2dq: A(xmm1[w], xmm_m128[align]) => 0xF3 + 0x0F + 0x5B /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvttps2dq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvttps2dq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvttps2dq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvttps2dq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvttps2dq_a<R>> for Inst<R> {
    fn from(inst: cvttps2dq_a<R>) -> Self {
        Self::cvttps2dq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtss2sd: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x5A /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtss2sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtss2sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtss2sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtss2sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtss2sd_a<R>> for Inst<R> {
    fn from(inst: cvtss2sd_a<R>) -> Self {
        Self::cvtss2sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtss2si: A(r32[w], xmm_m32) => 0xF3 + 0x0F + 0x2D /r [((_64b | compat) & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtss2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtss2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtss2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtss2si_a<R>> for Inst<R> {
    fn from(inst: cvtss2si_a<R>) -> Self {
        Self::cvtss2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtss2si: AQ(r64[w], xmm_m32) => 0xF3 + REX.W + 0x0F + 0x2D /r [(_64b & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtss2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtss2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtss2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtss2si_aq<R>> for Inst<R> {
    fn from(inst: cvtss2si_aq<R>) -> Self {
        Self::cvtss2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvttss2si: A(r32[w], xmm_m32) => 0xF3 + 0x0F + 0x2C /r [((_64b | compat) & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvttss2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvttss2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvttss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvttss2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvttss2si_a<R>> for Inst<R> {
    fn from(inst: cvttss2si_a<R>) -> Self {
        Self::cvttss2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvttss2si: AQ(r64[w], xmm_m32) => 0xF3 + REX.W + 0x0F + 0x2C /r [(_64b & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvttss2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvttss2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvttss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvttss2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvttss2si_aq<R>> for Inst<R> {
    fn from(inst: cvttss2si_aq<R>) -> Self {
        Self::cvttss2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtps2pd: A(xmm1[w], xmm_m64) => VEX.128.0F.WIG 0x5A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtps2pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtps2pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtps2pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtps2pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtps2pd_a<R>> for Inst<R> {
    fn from(inst: vcvtps2pd_a<R>) -> Self {
        Self::vcvtps2pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvttps2dq: A(xmm1[w], xmm_m128) => VEX.128.F3.0F.WIG 0x5B /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvttps2dq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvttps2dq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvttps2dq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvttps2dq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvttps2dq_a<R>> for Inst<R> {
    fn from(inst: vcvttps2dq_a<R>) -> Self {
        Self::vcvttps2dq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtss2sd: B(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x5A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtss2sd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtss2sd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtss2sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtss2sd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtss2sd_b<R>> for Inst<R> {
    fn from(inst: vcvtss2sd_b<R>) -> Self {
        Self::vcvtss2sd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtss2si: A(r32[w], xmm_m32) => VEX.LIG.F3.0F.W0 0x2D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtss2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtss2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtss2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtss2si_a<R>> for Inst<R> {
    fn from(inst: vcvtss2si_a<R>) -> Self {
        Self::vcvtss2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtss2si: AQ(r64[w], xmm_m32) => VEX.LIG.F3.0F.W1 0x2D /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtss2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtss2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtss2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtss2si_aq<R>> for Inst<R> {
    fn from(inst: vcvtss2si_aq<R>) -> Self {
        Self::vcvtss2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvttss2si: A(r32[w], xmm_m32) => VEX.LIG.F3.0F.W0 0x2C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvttss2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvttss2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvttss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvttss2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvttss2si_a<R>> for Inst<R> {
    fn from(inst: vcvttss2si_a<R>) -> Self {
        Self::vcvttss2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvttss2si: AQ(r64[w], xmm_m32) => VEX.LIG.F3.0F.W1 0x2C /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvttss2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvttss2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvttss2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvttss2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvttss2si_aq<R>> for Inst<R> {
    fn from(inst: vcvttss2si_aq<R>) -> Self {
        Self::vcvttss2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtpd2ps: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x5A /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtpd2ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtpd2ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtpd2ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtpd2ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtpd2ps_a<R>> for Inst<R> {
    fn from(inst: cvtpd2ps_a<R>) -> Self {
        Self::cvtpd2ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvttpd2dq: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0xE6 /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvttpd2dq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvttpd2dq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvttpd2dq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvttpd2dq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvttpd2dq_a<R>> for Inst<R> {
    fn from(inst: cvttpd2dq_a<R>) -> Self {
        Self::cvttpd2dq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsd2ss: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x5A /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsd2ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsd2ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsd2ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsd2ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsd2ss_a<R>> for Inst<R> {
    fn from(inst: cvtsd2ss_a<R>) -> Self {
        Self::cvtsd2ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsd2si: A(r32[w], xmm_m64) => 0xF2 + 0x0F + 0x2D /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsd2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsd2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsd2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsd2si_a<R>> for Inst<R> {
    fn from(inst: cvtsd2si_a<R>) -> Self {
        Self::cvtsd2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsd2si: AQ(r64[w], xmm_m64) => 0xF2 + REX.W + 0x0F + 0x2D /r [(_64b & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsd2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsd2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsd2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsd2si_aq<R>> for Inst<R> {
    fn from(inst: cvtsd2si_aq<R>) -> Self {
        Self::cvtsd2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvttsd2si: A(r32[w], xmm_m64) => 0xF2 + 0x0F + 0x2C /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvttsd2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvttsd2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvttsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvttsd2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvttsd2si_a<R>> for Inst<R> {
    fn from(inst: cvttsd2si_a<R>) -> Self {
        Self::cvttsd2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvttsd2si: AQ(r64[w], xmm_m64) => 0xF2 + REX.W + 0x0F + 0x2C /r [(_64b & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvttsd2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvttsd2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvttsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvttsd2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvttsd2si_aq<R>> for Inst<R> {
    fn from(inst: cvttsd2si_aq<R>) -> Self {
        Self::cvttsd2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtpd2ps: A(xmm1[w], xmm_m128) => VEX.128.66.0F.WIG 0x5A /r [((_64b | compat) & avx)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtpd2ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtpd2ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::vcvtpd2ps_a(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtpd2ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtpd2ps_a<R>> for Inst<R> {
    fn from(inst: vcvtpd2ps_a<R>) -> Self {
        Self::vcvtpd2ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvttpd2dq: A(xmm1[w], xmm_m128) => VEX.128.66.0F.WIG 0xE6 /r [((_64b | compat) & avx)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvttpd2dq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvttpd2dq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::vcvttpd2dq_a(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe6); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvttpd2dq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvttpd2dq_a<R>> for Inst<R> {
    fn from(inst: vcvttpd2dq_a<R>) -> Self {
        Self::vcvttpd2dq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsd2ss: B(xmm1[w], xmm2, xmm_m64) => VEX.LIG.F2.0F.WIG 0x5A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsd2ss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsd2ss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsd2ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsd2ss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsd2ss_b<R>> for Inst<R> {
    fn from(inst: vcvtsd2ss_b<R>) -> Self {
        Self::vcvtsd2ss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsd2si: A(r32[w], xmm_m64) => VEX.LIG.F2.0F.W0 0x2D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsd2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsd2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsd2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsd2si_a<R>> for Inst<R> {
    fn from(inst: vcvtsd2si_a<R>) -> Self {
        Self::vcvtsd2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsd2si: AQ(r64[w], xmm_m64) => VEX.LIG.F2.0F.W1 0x2D /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsd2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsd2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsd2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsd2si_aq<R>> for Inst<R> {
    fn from(inst: vcvtsd2si_aq<R>) -> Self {
        Self::vcvtsd2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvttsd2si: A(r32[w], xmm_m64) => VEX.LIG.F2.0F.W0 0x2C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvttsd2si_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvttsd2si_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvttsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvttsd2si_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvttsd2si_a<R>> for Inst<R> {
    fn from(inst: vcvttsd2si_a<R>) -> Self {
        Self::vcvttsd2si_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvttsd2si: AQ(r64[w], xmm_m64) => VEX.LIG.F2.0F.W1 0x2C /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvttsd2si_aq<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvttsd2si_aq<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvttsd2si") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvttsd2si_aq<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvttsd2si_aq<R>> for Inst<R> {
    fn from(inst: vcvttsd2si_aq<R>) -> Self {
        Self::vcvttsd2si_aq(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtdq2ps: A(xmm1[w], xmm_m128[align]) => 0x0F + 0x5B /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtdq2ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtdq2ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtdq2ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtdq2ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtdq2ps_a<R>> for Inst<R> {
    fn from(inst: cvtdq2ps_a<R>) -> Self {
        Self::cvtdq2ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtdq2pd: A(xmm1[w], xmm_m64) => 0xF3 + 0x0F + 0xE6 /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtdq2pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtdq2pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtdq2pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtdq2pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtdq2pd_a<R>> for Inst<R> {
    fn from(inst: cvtdq2pd_a<R>) -> Self {
        Self::cvtdq2pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsi2ssl: A(xmm1[rw], rm32) => 0xF3 + 0x0F + 0x2A /r [((_64b | compat) & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsi2ssl_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsi2ssl_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsi2ssl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsi2ssl_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsi2ssl_a<R>> for Inst<R> {
    fn from(inst: cvtsi2ssl_a<R>) -> Self {
        Self::cvtsi2ssl_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsi2ssq: A(xmm1[rw], rm64) => 0xF3 + REX.W + 0x0F + 0x2A /r [(_64b & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsi2ssq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsi2ssq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsi2ssq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsi2ssq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsi2ssq_a<R>> for Inst<R> {
    fn from(inst: cvtsi2ssq_a<R>) -> Self {
        Self::cvtsi2ssq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsi2sdl: A(xmm1[rw], rm32) => 0xF2 + 0x0F + 0x2A /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsi2sdl_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsi2sdl_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsi2sdl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsi2sdl_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsi2sdl_a<R>> for Inst<R> {
    fn from(inst: cvtsi2sdl_a<R>) -> Self {
        Self::cvtsi2sdl_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `cvtsi2sdq: A(xmm1[rw], rm64) => 0xF2 + REX.W + 0x0F + 0x2A /r [(_64b & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct cvtsi2sdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> cvtsi2sdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("cvtsi2sdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for cvtsi2sdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<cvtsi2sdq_a<R>> for Inst<R> {
    fn from(inst: cvtsi2sdq_a<R>) -> Self {
        Self::cvtsi2sdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtdq2pd: A(xmm1[w], xmm_m64) => VEX.128.F3.0F.WIG 0xE6 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtdq2pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtdq2pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtdq2pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe6); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtdq2pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtdq2pd_a<R>> for Inst<R> {
    fn from(inst: vcvtdq2pd_a<R>) -> Self {
        Self::vcvtdq2pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtdq2ps: A(xmm1[w], xmm_m128) => VEX.128.0F.WIG 0x5B /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtdq2ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtdq2ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtdq2ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtdq2ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtdq2ps_a<R>> for Inst<R> {
    fn from(inst: vcvtdq2ps_a<R>) -> Self {
        Self::vcvtdq2ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsi2sdl: B(xmm1[w], xmm2, rm32) => VEX.LIG.F2.0F.W0 0x2A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsi2sdl_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsi2sdl_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsi2sdl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsi2sdl_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsi2sdl_b<R>> for Inst<R> {
    fn from(inst: vcvtsi2sdl_b<R>) -> Self {
        Self::vcvtsi2sdl_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsi2sdq: B(xmm1[w], xmm2, rm64) => VEX.LIG.F2.0F.W1 0x2A /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsi2sdq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsi2sdq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsi2sdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsi2sdq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsi2sdq_b<R>> for Inst<R> {
    fn from(inst: vcvtsi2sdq_b<R>) -> Self {
        Self::vcvtsi2sdq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsi2ssl: B(xmm1[w], xmm2, rm32) => VEX.LIG.F3.0F.W0 0x2A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsi2ssl_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsi2ssl_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsi2ssl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsi2ssl_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsi2ssl_b<R>> for Inst<R> {
    fn from(inst: vcvtsi2ssl_b<R>) -> Self {
        Self::vcvtsi2ssl_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtsi2ssq: B(xmm1[w], xmm2, rm64) => VEX.LIG.F3.0F.W1 0x2A /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtsi2ssq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtsi2ssq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtsi2ssq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtsi2ssq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtsi2ssq_b<R>> for Inst<R> {
    fn from(inst: vcvtsi2ssq_b<R>) -> Self {
        Self::vcvtsi2ssq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vcvtudq2ps: A(xmm1[w], xmm_m128) => EVEX.128.F2.0F.W0 0x7A /r [((_64b | avx512vl) | avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vcvtudq2ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vcvtudq2ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vcvtudq2ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = EvexPrefix::two_op(reg, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x7a); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.avx512vl()) || features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vcvtudq2ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vcvtudq2ps_a<R>> for Inst<R> {
    fn from(inst: vcvtudq2ps_a<R>) -> Self {
        Self::vcvtudq2ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divb: M(ax[rw,implicit], rm8) => 0xF6 /6 [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divb_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> divb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm8} ;; implicit: {ax}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divb_m<R>> for Inst<R> {
    fn from(inst: divb_m<R>) -> Self {
        Self::divb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divw: M(ax[rw,implicit], dx[rw,implicit], rm16) => 0x66 + 0xF7 /6 [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divw_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub dx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> divw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, dx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            dx: dx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.dx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.dx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let dx = self.dx.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm16} ;; implicit: {ax}, {dx}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divw_m<R>> for Inst<R> {
    fn from(inst: divw_m<R>) -> Self {
        Self::divw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divl: M(eax[rw,implicit], edx[rw,implicit], rm32) => 0xF7 /6 [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divl_m<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub edx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> divl_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, edx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            edx: edx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.edx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.edx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divl_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let edx = self.edx.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm32} ;; implicit: {eax}, {edx}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divl_m<R>> for Inst<R> {
    fn from(inst: divl_m<R>) -> Self {
        Self::divl_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divq: M(rax[rw,implicit], rdx[rw,implicit], rm64) => REX.W + 0xF7 /6 [_64b] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divq_m<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> divq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rdx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm64} ;; implicit: {rax}, {rdx}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divq_m<R>> for Inst<R> {
    fn from(inst: divq_m<R>) -> Self {
        Self::divq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `idivb: M(ax[rw,implicit], rm8) => 0xF6 /7 [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct idivb_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> idivb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("idivb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for idivb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm8} ;; implicit: {ax}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<idivb_m<R>> for Inst<R> {
    fn from(inst: idivb_m<R>) -> Self {
        Self::idivb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `idivw: M(ax[rw,implicit], dx[rw,implicit], rm16) => 0x66 + 0xF7 /7 [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct idivw_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub dx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> idivw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, dx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            dx: dx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("idivw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.dx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.dx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for idivw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let dx = self.dx.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm16} ;; implicit: {ax}, {dx}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<idivw_m<R>> for Inst<R> {
    fn from(inst: idivw_m<R>) -> Self {
        Self::idivw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `idivl: M(eax[rw,implicit], edx[rw,implicit], rm32) => 0xF7 /7 [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct idivl_m<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub edx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> idivl_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, edx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            edx: edx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("idivl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.edx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.edx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for idivl_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let edx = self.edx.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm32} ;; implicit: {eax}, {edx}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<idivl_m<R>> for Inst<R> {
    fn from(inst: idivl_m<R>) -> Self {
        Self::idivl_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `idivq: M(rax[rw,implicit], rdx[rw,implicit], rm64) => REX.W + 0xF7 /7 [_64b] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct idivq_m<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl<R: Registers> idivq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rdx: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RDX }>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, trap: impl Into<TrapCode>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("idivq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for idivq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let trap = self.trap; // cranelift/assembler-x64/meta/src/generate/inst.rs:291
        write!(f, "{name} {rm64} ;; implicit: {rax}, {rdx}, {trap}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<idivq_m<R>> for Inst<R> {
    fn from(inst: idivq_m<R>) -> Self {
        Self::idivq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x5E /r [((_64b | compat) & sse)] (alternate: avx => vdivss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> divss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divss_a<R>> for Inst<R> {
    fn from(inst: divss_a<R>) -> Self {
        Self::divss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x5E /r [((_64b | compat) & sse2)] (alternate: avx => vdivsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> divsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divsd_a<R>> for Inst<R> {
    fn from(inst: divsd_a<R>) -> Self {
        Self::divsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x5E /r [((_64b | compat) & sse)] (alternate: avx => vdivps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> divps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divps_a<R>> for Inst<R> {
    fn from(inst: divps_a<R>) -> Self {
        Self::divps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `divpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x5E /r [((_64b | compat) & sse2)] (alternate: avx => vdivpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct divpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> divpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("divpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for divpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<divpd_a<R>> for Inst<R> {
    fn from(inst: divpd_a<R>) -> Self {
        Self::divpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vdivss: B(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x5E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vdivss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vdivss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vdivss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vdivss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vdivss_b<R>> for Inst<R> {
    fn from(inst: vdivss_b<R>) -> Self {
        Self::vdivss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vdivsd: B(xmm1[w], xmm2, xmm_m64) => VEX.LIG.F2.0F.WIG 0x5E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vdivsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vdivsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vdivsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vdivsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vdivsd_b<R>> for Inst<R> {
    fn from(inst: vdivsd_b<R>) -> Self {
        Self::vdivsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vdivps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x5E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vdivps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vdivps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vdivps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vdivps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vdivps_b<R>> for Inst<R> {
    fn from(inst: vdivps_b<R>) -> Self {
        Self::vdivps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vdivpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x5E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vdivpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vdivpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vdivpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vdivpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vdivpd_b<R>> for Inst<R> {
    fn from(inst: vdivpd_b<R>) -> Self {
        Self::vdivpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd132ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0x99 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd132ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd132ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd132ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x99); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd132ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd132ss_a<R>> for Inst<R> {
    fn from(inst: vfmadd132ss_a<R>) -> Self {
        Self::vfmadd132ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd213ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xA9 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd213ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd213ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd213ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xa9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd213ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd213ss_a<R>> for Inst<R> {
    fn from(inst: vfmadd213ss_a<R>) -> Self {
        Self::vfmadd213ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd231ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xB9 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd231ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd231ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd231ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xb9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd231ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd231ss_a<R>> for Inst<R> {
    fn from(inst: vfmadd231ss_a<R>) -> Self {
        Self::vfmadd231ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd132sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0x99 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd132sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd132sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd132sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x99); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd132sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd132sd_a<R>> for Inst<R> {
    fn from(inst: vfmadd132sd_a<R>) -> Self {
        Self::vfmadd132sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd213sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xA9 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd213sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd213sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd213sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xa9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd213sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd213sd_a<R>> for Inst<R> {
    fn from(inst: vfmadd213sd_a<R>) -> Self {
        Self::vfmadd213sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd231sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xB9 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd231sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd231sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd231sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xb9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd231sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd231sd_a<R>> for Inst<R> {
    fn from(inst: vfmadd231sd_a<R>) -> Self {
        Self::vfmadd231sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd132ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0x98 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd132ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd132ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd132ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x98); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd132ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd132ps_a<R>> for Inst<R> {
    fn from(inst: vfmadd132ps_a<R>) -> Self {
        Self::vfmadd132ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd213ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xA8 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd213ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd213ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd213ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xa8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd213ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd213ps_a<R>> for Inst<R> {
    fn from(inst: vfmadd213ps_a<R>) -> Self {
        Self::vfmadd213ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd231ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xB8 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd231ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd231ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd231ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xb8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd231ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd231ps_a<R>> for Inst<R> {
    fn from(inst: vfmadd231ps_a<R>) -> Self {
        Self::vfmadd231ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd132pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0x98 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd132pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd132pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd132pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x98); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd132pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd132pd_a<R>> for Inst<R> {
    fn from(inst: vfmadd132pd_a<R>) -> Self {
        Self::vfmadd132pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd213pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xA8 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd213pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd213pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd213pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xa8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd213pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd213pd_a<R>> for Inst<R> {
    fn from(inst: vfmadd213pd_a<R>) -> Self {
        Self::vfmadd213pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmadd231pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xB8 /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmadd231pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmadd231pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmadd231pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xb8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmadd231pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmadd231pd_a<R>> for Inst<R> {
    fn from(inst: vfmadd231pd_a<R>) -> Self {
        Self::vfmadd231pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd132ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0x9D /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd132ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd132ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd132ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd132ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd132ss_a<R>> for Inst<R> {
    fn from(inst: vfnmadd132ss_a<R>) -> Self {
        Self::vfnmadd132ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd213ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xAD /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd213ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd213ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd213ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xad); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd213ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd213ss_a<R>> for Inst<R> {
    fn from(inst: vfnmadd213ss_a<R>) -> Self {
        Self::vfnmadd213ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd231ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xBD /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd231ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd231ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd231ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd231ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd231ss_a<R>> for Inst<R> {
    fn from(inst: vfnmadd231ss_a<R>) -> Self {
        Self::vfnmadd231ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd132sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0x9D /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd132sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd132sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd132sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd132sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd132sd_a<R>> for Inst<R> {
    fn from(inst: vfnmadd132sd_a<R>) -> Self {
        Self::vfnmadd132sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd213sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xAD /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd213sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd213sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd213sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xad); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd213sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd213sd_a<R>> for Inst<R> {
    fn from(inst: vfnmadd213sd_a<R>) -> Self {
        Self::vfnmadd213sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd231sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xBD /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd231sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd231sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd231sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbd); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd231sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd231sd_a<R>> for Inst<R> {
    fn from(inst: vfnmadd231sd_a<R>) -> Self {
        Self::vfnmadd231sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd132ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0x9C /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd132ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd132ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd132ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd132ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd132ps_a<R>> for Inst<R> {
    fn from(inst: vfnmadd132ps_a<R>) -> Self {
        Self::vfnmadd132ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd213ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xAC /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd213ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd213ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd213ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xac); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd213ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd213ps_a<R>> for Inst<R> {
    fn from(inst: vfnmadd213ps_a<R>) -> Self {
        Self::vfnmadd213ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd231ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xBC /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd231ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd231ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd231ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd231ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd231ps_a<R>> for Inst<R> {
    fn from(inst: vfnmadd231ps_a<R>) -> Self {
        Self::vfnmadd231ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd132pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0x9C /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd132pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd132pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd132pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd132pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd132pd_a<R>> for Inst<R> {
    fn from(inst: vfnmadd132pd_a<R>) -> Self {
        Self::vfnmadd132pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd213pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xAC /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd213pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd213pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd213pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xac); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd213pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd213pd_a<R>> for Inst<R> {
    fn from(inst: vfnmadd213pd_a<R>) -> Self {
        Self::vfnmadd213pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmadd231pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xBC /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmadd231pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmadd231pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmadd231pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbc); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmadd231pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmadd231pd_a<R>> for Inst<R> {
    fn from(inst: vfnmadd231pd_a<R>) -> Self {
        Self::vfnmadd231pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub132ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0x9B /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub132ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub132ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub132ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub132ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub132ss_a<R>> for Inst<R> {
    fn from(inst: vfmsub132ss_a<R>) -> Self {
        Self::vfmsub132ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub213ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xAB /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub213ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub213ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub213ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xab); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub213ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub213ss_a<R>> for Inst<R> {
    fn from(inst: vfmsub213ss_a<R>) -> Self {
        Self::vfmsub213ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub231ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xBB /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub231ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub231ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub231ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub231ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub231ss_a<R>> for Inst<R> {
    fn from(inst: vfmsub231ss_a<R>) -> Self {
        Self::vfmsub231ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub132sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0x9B /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub132sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub132sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub132sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub132sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub132sd_a<R>> for Inst<R> {
    fn from(inst: vfmsub132sd_a<R>) -> Self {
        Self::vfmsub132sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub213sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xAB /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub213sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub213sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub213sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xab); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub213sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub213sd_a<R>> for Inst<R> {
    fn from(inst: vfmsub213sd_a<R>) -> Self {
        Self::vfmsub213sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub231sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xBB /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub231sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub231sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub231sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub231sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub231sd_a<R>> for Inst<R> {
    fn from(inst: vfmsub231sd_a<R>) -> Self {
        Self::vfmsub231sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub132ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0x9A /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub132ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub132ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub132ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub132ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub132ps_a<R>> for Inst<R> {
    fn from(inst: vfmsub132ps_a<R>) -> Self {
        Self::vfmsub132ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub213ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xAA /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub213ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub213ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub213ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xaa); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub213ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub213ps_a<R>> for Inst<R> {
    fn from(inst: vfmsub213ps_a<R>) -> Self {
        Self::vfmsub213ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub231ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xBA /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub231ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub231ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub231ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xba); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub231ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub231ps_a<R>> for Inst<R> {
    fn from(inst: vfmsub231ps_a<R>) -> Self {
        Self::vfmsub231ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub132pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0x9A /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub132pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub132pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub132pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub132pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub132pd_a<R>> for Inst<R> {
    fn from(inst: vfmsub132pd_a<R>) -> Self {
        Self::vfmsub132pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub213pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xAA /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub213pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub213pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub213pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xaa); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub213pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub213pd_a<R>> for Inst<R> {
    fn from(inst: vfmsub213pd_a<R>) -> Self {
        Self::vfmsub213pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfmsub231pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xBA /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfmsub231pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfmsub231pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfmsub231pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xba); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfmsub231pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfmsub231pd_a<R>> for Inst<R> {
    fn from(inst: vfmsub231pd_a<R>) -> Self {
        Self::vfmsub231pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub132ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0x9F /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub132ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub132ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub132ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub132ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub132ss_a<R>> for Inst<R> {
    fn from(inst: vfnmsub132ss_a<R>) -> Self {
        Self::vfnmsub132ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub213ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xAF /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub213ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub213ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub213ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xaf); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub213ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub213ss_a<R>> for Inst<R> {
    fn from(inst: vfnmsub213ss_a<R>) -> Self {
        Self::vfnmsub213ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub231ss: A(xmm1[rw], xmm2, xmm_m32) => VEX.LIG.66.0F38.W0 0xBF /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub231ss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub231ss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub231ss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbf); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub231ss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub231ss_a<R>> for Inst<R> {
    fn from(inst: vfnmsub231ss_a<R>) -> Self {
        Self::vfnmsub231ss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub132sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0x9F /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub132sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub132sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub132sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub132sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub132sd_a<R>> for Inst<R> {
    fn from(inst: vfnmsub132sd_a<R>) -> Self {
        Self::vfnmsub132sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub213sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xAF /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub213sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub213sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub213sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xaf); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub213sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub213sd_a<R>> for Inst<R> {
    fn from(inst: vfnmsub213sd_a<R>) -> Self {
        Self::vfnmsub213sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub231sd: A(xmm1[rw], xmm2, xmm_m64) => VEX.LIG.66.0F38.W1 0xBF /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub231sd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub231sd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub231sd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbf); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub231sd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub231sd_a<R>> for Inst<R> {
    fn from(inst: vfnmsub231sd_a<R>) -> Self {
        Self::vfnmsub231sd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub132ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0x9E /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub132ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub132ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub132ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub132ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub132ps_a<R>> for Inst<R> {
    fn from(inst: vfnmsub132ps_a<R>) -> Self {
        Self::vfnmsub132ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub213ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xAE /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub213ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub213ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub213ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xae); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub213ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub213ps_a<R>> for Inst<R> {
    fn from(inst: vfnmsub213ps_a<R>) -> Self {
        Self::vfnmsub213ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub231ps: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W0 0xBE /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub231ps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub231ps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub231ps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbe); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub231ps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub231ps_a<R>> for Inst<R> {
    fn from(inst: vfnmsub231ps_a<R>) -> Self {
        Self::vfnmsub231ps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub132pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0x9E /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub132pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub132pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub132pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub132pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub132pd_a<R>> for Inst<R> {
    fn from(inst: vfnmsub132pd_a<R>) -> Self {
        Self::vfnmsub132pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub213pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xAE /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub213pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub213pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub213pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xae); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub213pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub213pd_a<R>> for Inst<R> {
    fn from(inst: vfnmsub213pd_a<R>) -> Self {
        Self::vfnmsub213pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vfnmsub231pd: A(xmm1[rw], xmm2, xmm_m128) => VEX.LIG.66.0F38.W1 0xBE /r [((_64b | compat) & fma)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vfnmsub231pd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vfnmsub231pd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vfnmsub231pd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xbe); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.fma() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::fma); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vfnmsub231pd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vfnmsub231pd_a<R>> for Inst<R> {
    fn from(inst: vfnmsub231pd_a<R>) -> Self {
        Self::vfnmsub231pd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jmpq: M(rm64) => 0xFF /4 [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct jmpq_m<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> jmpq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jmpq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xff); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for jmpq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jmpq_m(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jmpq_m<R>> for Inst<R> {
    fn from(inst: jmpq_m<R>) -> Self {
        Self::jmpq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jmp: D8(imm8[sxq]) => 0xEB ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jmp_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jmp_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jmp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xeb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jmp_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jmp_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jmp_d8> for Inst<R> {
    fn from(inst: jmp_d8) -> Self {
        Self::jmp_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jmp: D32(imm32[sxq]) => 0xE9 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jmp_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jmp_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jmp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xe9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jmp_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jmp_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jmp_d32> for Inst<R> {
    fn from(inst: jmp_d32) -> Self {
        Self::jmp_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `ja: D8(imm8[sxq]) => 0x77 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct ja_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl ja_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("ja") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x77); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for ja_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::ja_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<ja_d8> for Inst<R> {
    fn from(inst: ja_d8) -> Self {
        Self::ja_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `ja: D32(imm32[sxq]) => 0x0F + 0x87 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct ja_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl ja_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("ja") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x87); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for ja_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::ja_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<ja_d32> for Inst<R> {
    fn from(inst: ja_d32) -> Self {
        Self::ja_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jae: D8(imm8[sxq]) => 0x73 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jae_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jae_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jae") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jae_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jae_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jae_d8> for Inst<R> {
    fn from(inst: jae_d8) -> Self {
        Self::jae_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jae: D32(imm32[sxq]) => 0x0F + 0x83 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jae_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jae_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jae") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jae_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jae_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jae_d32> for Inst<R> {
    fn from(inst: jae_d32) -> Self {
        Self::jae_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jb: D8(imm8[sxq]) => 0x72 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jb_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jb_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jb_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jb_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jb_d8> for Inst<R> {
    fn from(inst: jb_d8) -> Self {
        Self::jb_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jb: D32(imm32[sxq]) => 0x0F + 0x82 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jb_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jb_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x82); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jb_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jb_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jb_d32> for Inst<R> {
    fn from(inst: jb_d32) -> Self {
        Self::jb_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jbe: D8(imm8[sxq]) => 0x76 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jbe_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jbe_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jbe") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x76); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jbe_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jbe_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jbe_d8> for Inst<R> {
    fn from(inst: jbe_d8) -> Self {
        Self::jbe_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jbe: D32(imm32[sxq]) => 0x0F + 0x86 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jbe_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jbe_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jbe") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x86); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jbe_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jbe_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jbe_d32> for Inst<R> {
    fn from(inst: jbe_d32) -> Self {
        Self::jbe_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `je: D8(imm8[sxq]) => 0x74 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct je_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl je_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("je") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x74); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for je_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::je_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<je_d8> for Inst<R> {
    fn from(inst: je_d8) -> Self {
        Self::je_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `je: D32(imm32[sxq]) => 0x0F + 0x84 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct je_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl je_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("je") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x84); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for je_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::je_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<je_d32> for Inst<R> {
    fn from(inst: je_d32) -> Self {
        Self::je_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jg: D8(imm8[sxq]) => 0x7F ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jg_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jg_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jg") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x7f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jg_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jg_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jg_d8> for Inst<R> {
    fn from(inst: jg_d8) -> Self {
        Self::jg_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jg: D32(imm32[sxq]) => 0x0F + 0x8F id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jg_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jg_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jg") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x8f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jg_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jg_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jg_d32> for Inst<R> {
    fn from(inst: jg_d32) -> Self {
        Self::jg_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jge: D8(imm8[sxq]) => 0x7D ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jge_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jge_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jge") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x7d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jge_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jge_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jge_d8> for Inst<R> {
    fn from(inst: jge_d8) -> Self {
        Self::jge_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jge: D32(imm32[sxq]) => 0x0F + 0x8D id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jge_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jge_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jge") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x8d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jge_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jge_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jge_d32> for Inst<R> {
    fn from(inst: jge_d32) -> Self {
        Self::jge_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jl: D8(imm8[sxq]) => 0x7C ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jl_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jl_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x7c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jl_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jl_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jl_d8> for Inst<R> {
    fn from(inst: jl_d8) -> Self {
        Self::jl_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jl: D32(imm32[sxq]) => 0x0F + 0x8C id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jl_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jl_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x8c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jl_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jl_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jl_d32> for Inst<R> {
    fn from(inst: jl_d32) -> Self {
        Self::jl_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jle: D8(imm8[sxq]) => 0x7E ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jle_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jle_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jle") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x7e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jle_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jle_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jle_d8> for Inst<R> {
    fn from(inst: jle_d8) -> Self {
        Self::jle_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jle: D32(imm32[sxq]) => 0x0F + 0x8E id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jle_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jle_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jle") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x8e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jle_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jle_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jle_d32> for Inst<R> {
    fn from(inst: jle_d32) -> Self {
        Self::jle_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jne: D8(imm8[sxq]) => 0x75 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jne_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jne_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jne") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x75); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jne_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jne_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jne_d8> for Inst<R> {
    fn from(inst: jne_d8) -> Self {
        Self::jne_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jne: D32(imm32[sxq]) => 0x0F + 0x85 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jne_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jne_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jne") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x85); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jne_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jne_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jne_d32> for Inst<R> {
    fn from(inst: jne_d32) -> Self {
        Self::jne_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jno: D8(imm8[sxq]) => 0x71 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jno_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jno_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jno") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jno_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jno_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jno_d8> for Inst<R> {
    fn from(inst: jno_d8) -> Self {
        Self::jno_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jno: D32(imm32[sxq]) => 0x0F + 0x81 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jno_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jno_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jno") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jno_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jno_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jno_d32> for Inst<R> {
    fn from(inst: jno_d32) -> Self {
        Self::jno_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jnp: D8(imm8[sxq]) => 0x7B ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jnp_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jnp_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jnp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x7b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jnp_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jnp_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jnp_d8> for Inst<R> {
    fn from(inst: jnp_d8) -> Self {
        Self::jnp_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jnp: D32(imm32[sxq]) => 0x0F + 0x8B id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jnp_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jnp_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jnp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x8b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jnp_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jnp_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jnp_d32> for Inst<R> {
    fn from(inst: jnp_d32) -> Self {
        Self::jnp_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jns: D8(imm8[sxq]) => 0x79 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jns_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jns_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jns") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x79); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jns_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jns_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jns_d8> for Inst<R> {
    fn from(inst: jns_d8) -> Self {
        Self::jns_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jns: D32(imm32[sxq]) => 0x0F + 0x89 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jns_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jns_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jns") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x89); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jns_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jns_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jns_d32> for Inst<R> {
    fn from(inst: jns_d32) -> Self {
        Self::jns_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jo: D8(imm8[sxq]) => 0x70 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jo_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jo_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jo") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jo_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jo_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jo_d8> for Inst<R> {
    fn from(inst: jo_d8) -> Self {
        Self::jo_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jo: D32(imm32[sxq]) => 0x0F + 0x80 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jo_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jo_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jo") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jo_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jo_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jo_d32> for Inst<R> {
    fn from(inst: jo_d32) -> Self {
        Self::jo_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jp: D8(imm8[sxq]) => 0x7A ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jp_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jp_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x7a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jp_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jp_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jp_d8> for Inst<R> {
    fn from(inst: jp_d8) -> Self {
        Self::jp_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `jp: D32(imm32[sxq]) => 0x0F + 0x8A id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct jp_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl jp_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("jp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x8a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for jp_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::jp_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<jp_d32> for Inst<R> {
    fn from(inst: jp_d32) -> Self {
        Self::jp_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `js: D8(imm8[sxq]) => 0x78 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct js_d8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl js_d8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("js") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x78); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for js_d8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::js_d8(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<js_d8> for Inst<R> {
    fn from(inst: js_d8) -> Self {
        Self::js_d8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `js: D32(imm32[sxq]) => 0x0F + 0x88 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct js_d32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl js_d32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("js") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x88); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for js_d32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::js_d32(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<js_d32> for Inst<R> {
    fn from(inst: js_d32) -> Self {
        Self::js_d32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `extractps: A(rm32[w], xmm1, imm8) => 0x66 + 0x0F + 0x3A 0x17 /r ib [((_64b | compat) & sse41)] (alternate: avx => vextractps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct extractps_a<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> extractps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("extractps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x17); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for extractps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<extractps_a<R>> for Inst<R> {
    fn from(inst: extractps_a<R>) -> Self {
        Self::extractps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pextrb: A(rm32[w], xmm2, imm8) => 0x66 + 0x0F + 0x3A 0x14 /r ib [((_64b | compat) & sse41)] (alternate: avx => vpextrb_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pextrb_a<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pextrb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pextrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pextrb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pextrb_a<R>> for Inst<R> {
    fn from(inst: pextrb_a<R>) -> Self {
        Self::pextrb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pextrw: A(r32[w], xmm2, imm8) => 0x66 + 0x0F + 0xC5 /r ib [((_64b | compat) & sse2)] (alternate: avx => vpextrw_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pextrw_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pextrw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pextrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pextrw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pextrw_a<R>> for Inst<R> {
    fn from(inst: pextrw_a<R>) -> Self {
        Self::pextrw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pextrw: B(rm32[w], xmm2, imm8) => 0x66 + 0x0F + 0x3A 0x15 /r ib [((_64b | compat) & sse41)] (alternate: avx => vpextrw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pextrw_b<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pextrw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pextrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pextrw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pextrw_b<R>> for Inst<R> {
    fn from(inst: pextrw_b<R>) -> Self {
        Self::pextrw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pextrd: A(rm32[w], xmm2, imm8) => 0x66 + 0x0F + 0x3A 0x16 /r ib [((_64b | compat) & sse41)] (alternate: avx => vpextrd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pextrd_a<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pextrd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pextrd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pextrd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pextrd_a<R>> for Inst<R> {
    fn from(inst: pextrd_a<R>) -> Self {
        Self::pextrd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pextrq: A(rm64[w], xmm2, imm8) => 0x66 + REX.W + 0x0F + 0x3A 0x16 /r ib [(_64b & sse41)] (alternate: avx => vpextrq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pextrq_a<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pextrq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pextrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pextrq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pextrq_a<R>> for Inst<R> {
    fn from(inst: pextrq_a<R>) -> Self {
        Self::pextrq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vextractps: B(rm32[w], xmm1, imm8) => VEX.128.66.0F3A.WIG 0x17 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vextractps_b<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vextractps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vextractps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x17); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vextractps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vextractps_b<R>> for Inst<R> {
    fn from(inst: vextractps_b<R>) -> Self {
        Self::vextractps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpextrb: A(rm32[w], xmm2, imm8) => VEX.128.66.0F3A.W0 0x14 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpextrb_a<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpextrb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpextrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpextrb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpextrb_a<R>> for Inst<R> {
    fn from(inst: vpextrb_a<R>) -> Self {
        Self::vpextrb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpextrw: A(r32[w], xmm2, imm8) => VEX.128.66.0F.W0 0xC5 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpextrw_a<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpextrw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpextrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:412
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:413
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:414
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc5); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpextrw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpextrw_a<R>> for Inst<R> {
    fn from(inst: vpextrw_a<R>) -> Self {
        Self::vpextrw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpextrw: B(rm32[w], xmm2, imm8) => VEX.128.66.0F3A.W0 0x15 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpextrw_b<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpextrw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpextrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpextrw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpextrw_b<R>> for Inst<R> {
    fn from(inst: vpextrw_b<R>) -> Self {
        Self::vpextrw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpextrd: A(rm32[w], xmm2, imm8) => VEX.128.66.0F3A.W0 0x16 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpextrd_a<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpextrd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpextrd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpextrd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpextrd_a<R>> for Inst<R> {
    fn from(inst: vpextrd_a<R>) -> Self {
        Self::vpextrd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpextrq: A(rm64[w], xmm2, imm8) => VEX.128.66.0F3A.W1 0x16 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpextrq_a<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpextrq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpextrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpextrq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpextrq_a<R>> for Inst<R> {
    fn from(inst: vpextrq_a<R>) -> Self {
        Self::vpextrq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `insertps: A(xmm1[rw], xmm_m32, imm8) => 0x66 + 0x0F + 0x3A 0x21 /r ib [((_64b | compat) & sse41)] (alternate: avx => vinsertps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct insertps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> insertps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("insertps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for insertps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<insertps_a<R>> for Inst<R> {
    fn from(inst: insertps_a<R>) -> Self {
        Self::insertps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pinsrb: A(xmm1[rw], rm32, imm8) => 0x66 + 0x0F + 0x3A 0x20 /r ib [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pinsrb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pinsrb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pinsrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x20); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pinsrb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pinsrb_a<R>> for Inst<R> {
    fn from(inst: pinsrb_a<R>) -> Self {
        Self::pinsrb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pinsrw: A(xmm1[rw], rm32, imm8) => 0x66 + 0x0F + 0xC4 /r ib [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pinsrw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pinsrw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pinsrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pinsrw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pinsrw_a<R>> for Inst<R> {
    fn from(inst: pinsrw_a<R>) -> Self {
        Self::pinsrw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pinsrd: A(xmm1[rw], rm32, imm8) => 0x66 + 0x0F + 0x3A 0x22 /r ib [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pinsrd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pinsrd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pinsrd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pinsrd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pinsrd_a<R>> for Inst<R> {
    fn from(inst: pinsrd_a<R>) -> Self {
        Self::pinsrd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pinsrq: A(xmm1[rw], rm64, imm8) => 0x66 + REX.W + 0x0F + 0x3A 0x22 /r ib [(_64b & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pinsrq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pinsrq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pinsrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pinsrq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pinsrq_a<R>> for Inst<R> {
    fn from(inst: pinsrq_a<R>) -> Self {
        Self::pinsrq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vinsertps: B(xmm1[w], xmm2, xmm_m32, imm8) => VEX.128.66.0F3A.WIG 0x21 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vinsertps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vinsertps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vinsertps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vinsertps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vinsertps_b<R>> for Inst<R> {
    fn from(inst: vinsertps_b<R>) -> Self {
        Self::vinsertps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpinsrb: B(xmm1[w], xmm2, rm32, imm8) => VEX.128.66.0F3A.W0 0x20 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpinsrb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpinsrb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpinsrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x20); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpinsrb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpinsrb_b<R>> for Inst<R> {
    fn from(inst: vpinsrb_b<R>) -> Self {
        Self::vpinsrb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpinsrw: B(xmm1[w], xmm2, rm32, imm8) => VEX.128.66.0F.W0 0xC4 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpinsrw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpinsrw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpinsrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc4); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpinsrw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpinsrw_b<R>> for Inst<R> {
    fn from(inst: vpinsrw_b<R>) -> Self {
        Self::vpinsrw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpinsrd: B(xmm1[w], xmm2, rm32, imm8) => VEX.128.66.0F3A.W0 0x22 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpinsrd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpinsrd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpinsrd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpinsrd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpinsrd_b<R>> for Inst<R> {
    fn from(inst: vpinsrd_b<R>) -> Self {
        Self::vpinsrd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpinsrq: B(xmm1[w], xmm2, rm64, imm8) => VEX.128.66.0F3A.W1 0x22 /r ib [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpinsrq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpinsrq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpinsrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpinsrq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpinsrq_b<R>> for Inst<R> {
    fn from(inst: vpinsrq_b<R>) -> Self {
        Self::vpinsrq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movmskps: RM(r32[w], xmm2) => 0x0F + 0x50 /r [((_64b | compat) & sse)] (alternate: avx => vmovmskps_rm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movmskps_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movmskps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movmskps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x50); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movmskps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movmskps_rm<R>> for Inst<R> {
    fn from(inst: movmskps_rm<R>) -> Self {
        Self::movmskps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movmskpd: RM(r32[w], xmm2) => 0x66 + 0x0F + 0x50 /r [((_64b | compat) & sse2)] (alternate: avx => vmovmskpd_rm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movmskpd_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movmskpd_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movmskpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x50); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movmskpd_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movmskpd_rm<R>> for Inst<R> {
    fn from(inst: movmskpd_rm<R>) -> Self {
        Self::movmskpd_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovmskb: RM(r32[w], xmm2) => 0x66 + 0x0F + 0xD7 /r [((_64b | compat) & sse2)] (alternate: avx => vpmovmskb_rm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovmskb_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovmskb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovmskb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovmskb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovmskb_rm<R>> for Inst<R> {
    fn from(inst: pmovmskb_rm<R>) -> Self {
        Self::pmovmskb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovmskps: RM(r32[w], xmm2) => VEX.128.0F.WIG 0x50 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovmskps_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovmskps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovmskps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:412
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:413
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:414
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x50); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovmskps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovmskps_rm<R>> for Inst<R> {
    fn from(inst: vmovmskps_rm<R>) -> Self {
        Self::vmovmskps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovmskpd: RM(r32[w], xmm2) => VEX.128.66.0F.WIG 0x50 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovmskpd_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovmskpd_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovmskpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:412
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:413
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:414
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x50); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovmskpd_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovmskpd_rm<R>> for Inst<R> {
    fn from(inst: vmovmskpd_rm<R>) -> Self {
        Self::vmovmskpd_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovmskb: RM(r32[w], xmm2) => VEX.128.66.0F.WIG 0xD7 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovmskb_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovmskb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovmskb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:412
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:413
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:414
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovmskb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovmskb_rm<R>> for Inst<R> {
    fn from(inst: vpmovmskb_rm<R>) -> Self {
        Self::vpmovmskb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movhps: A(xmm1[rw], m64) => 0x0F + 0x16 /r [((_64b | compat) & sse)] (alternate: avx => vmovhps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movhps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movhps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, m64: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movhps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movhps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movhps_a<R>> for Inst<R> {
    fn from(inst: movhps_a<R>) -> Self {
        Self::movhps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movlhps: RM(xmm1[rw], xmm2) => 0x0F + 0x16 /r [((_64b | compat) & sse)] (alternate: avx => vmovlhps_rvm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movlhps_rm<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movlhps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movlhps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movlhps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movlhps_rm<R>> for Inst<R> {
    fn from(inst: movlhps_rm<R>) -> Self {
        Self::movlhps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovhps: B(xmm2[w], xmm1, m64) => VEX.128.0F.WIG 0x16 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovhps_b<R> where R: Registers {
    pub xmm2: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovhps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm2: impl Into<Xmm<R::WriteXmm>>, xmm1: impl Into<Xmm<R::ReadXmm>>, m64: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovhps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovhps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m64}, {xmm1}, {xmm2}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovhps_b<R>> for Inst<R> {
    fn from(inst: vmovhps_b<R>) -> Self {
        Self::vmovhps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovlhps: RVM(xmm1[w], xmm2, xmm3) => VEX.128.0F.WIG 0x16 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovlhps_rvm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm3: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovlhps_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm3: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm3: xmm3.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovlhps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:314
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:315
        let rm = self.xmm3.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:316
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:317
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x16); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm3.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm3.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovlhps_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm3 = self.xmm3.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm3}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovlhps_rvm<R>> for Inst<R> {
    fn from(inst: vmovlhps_rvm<R>) -> Self {
        Self::vmovlhps_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movddup: A(xmm1[w], xmm_m64) => 0xF2 + 0x0F + 0x12 /r [((_64b | compat) & sse3)] (alternate: avx => vmovddup_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movddup_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movddup_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movddup") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x12); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movddup_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movddup_a<R>> for Inst<R> {
    fn from(inst: movddup_a<R>) -> Self {
        Self::movddup_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovddup: A(xmm1[w], xmm_m64) => VEX.128.F2.0F.WIG 0x12 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovddup_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovddup_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovddup") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x12); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovddup_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovddup_a<R>> for Inst<R> {
    fn from(inst: vmovddup_a<R>) -> Self {
        Self::vmovddup_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pblendw: RMI(xmm1[rw], xmm_m128[align], imm8) => 0x66 + 0x0F + 0x3A 0x0E /r ib [((_64b | compat) & sse41)] (alternate: avx => vpblendw_rvmi)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pblendw_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pblendw_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pblendw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xe); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pblendw_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pblendw_rmi<R>> for Inst<R> {
    fn from(inst: pblendw_rmi<R>) -> Self {
        Self::pblendw_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pblendvb: RM(xmm1[rw], xmm_m128[align], xmm0) => 0x66 + 0x0F + 0x38 0x10 /r [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pblendvb_rm<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm0: Fixed<R::ReadXmm, { xmm::enc::XMM0 }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pblendvb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, xmm0: impl Into<Fixed<R::ReadXmm, { xmm::enc::XMM0 }>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm0: xmm0.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pblendvb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.xmm0.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_xmm(&mut self.xmm0.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pblendvb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm0 = self.xmm0.to_string(None); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm0}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pblendvb_rm<R>> for Inst<R> {
    fn from(inst: pblendvb_rm<R>) -> Self {
        Self::pblendvb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blendvps: RM0(xmm1[rw], xmm_m128[align], xmm0) => 0x66 + 0x0F + 0x38 0x14 /r [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blendvps_rm0<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm0: Fixed<R::ReadXmm, { xmm::enc::XMM0 }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blendvps_rm0<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, xmm0: impl Into<Fixed<R::ReadXmm, { xmm::enc::XMM0 }>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm0: xmm0.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blendvps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.xmm0.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_xmm(&mut self.xmm0.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blendvps_rm0<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm0 = self.xmm0.to_string(None); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm0}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blendvps_rm0<R>> for Inst<R> {
    fn from(inst: blendvps_rm0<R>) -> Self {
        Self::blendvps_rm0(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `blendvpd: RM0(xmm1[rw], xmm_m128[align], xmm0) => 0x66 + 0x0F + 0x38 0x15 /r [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct blendvpd_rm0<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm0: Fixed<R::ReadXmm, { xmm::enc::XMM0 }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> blendvpd_rm0<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, xmm0: impl Into<Fixed<R::ReadXmm, { xmm::enc::XMM0 }>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm0: xmm0.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("blendvpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.xmm0.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_xmm(&mut self.xmm0.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for blendvpd_rm0<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm0 = self.xmm0.to_string(None); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm0}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<blendvpd_rm0<R>> for Inst<R> {
    fn from(inst: blendvpd_rm0<R>) -> Self {
        Self::blendvpd_rm0(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpblendw: RVMI(xmm1[w], xmm2, xmm_m128, imm8) => VEX.128.66.0F3A.W0 0x0E /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpblendw_rvmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpblendw_rvmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpblendw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpblendw_rvmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpblendw_rvmi<R>> for Inst<R> {
    fn from(inst: vpblendw_rvmi<R>) -> Self {
        Self::vpblendw_rvmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpblendvb: RVMR(xmm1[w], xmm2, xmm_m128, xmm3) => VEX.128.66.0F3A.W0 0x4C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpblendvb_rvmr<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm3: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpblendvb_rvmr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, xmm3: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm3: xmm3.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpblendvb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:346
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:347
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:348
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:349
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x4c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
        buf.put1(self.xmm3.enc() << 4); // cranelift/assembler-x64/meta/src/generate/format.rs:500
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm3.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpblendvb_rvmr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm3 = self.xmm3.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm3}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpblendvb_rvmr<R>> for Inst<R> {
    fn from(inst: vpblendvb_rvmr<R>) -> Self {
        Self::vpblendvb_rvmr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vblendvps: RVMR(xmm1[w], xmm2, xmm_m128, xmm3) => VEX.128.66.0F3A.W0 0x4A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vblendvps_rvmr<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm3: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vblendvps_rvmr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, xmm3: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm3: xmm3.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vblendvps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:346
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:347
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:348
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:349
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x4a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
        buf.put1(self.xmm3.enc() << 4); // cranelift/assembler-x64/meta/src/generate/format.rs:500
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm3.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vblendvps_rvmr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm3 = self.xmm3.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm3}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vblendvps_rvmr<R>> for Inst<R> {
    fn from(inst: vblendvps_rvmr<R>) -> Self {
        Self::vblendvps_rvmr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vblendvpd: RVMR(xmm1[w], xmm2, xmm_m128, xmm3) => VEX.128.66.0F3A.W0 0x4B /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vblendvpd_rvmr<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm3: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vblendvpd_rvmr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, xmm3: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm3: xmm3.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vblendvpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:346
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:347
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:348
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:349
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x4b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
        buf.put1(self.xmm3.enc() << 4); // cranelift/assembler-x64/meta/src/generate/format.rs:500
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm3.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vblendvpd_rvmr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm3 = self.xmm3.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm3}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vblendvpd_rvmr<R>> for Inst<R> {
    fn from(inst: vblendvpd_rvmr<R>) -> Self {
        Self::vblendvpd_rvmr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shufpd: A(xmm1[rw], xmm_m128[align], imm8) => 0x66 + 0x0F + 0xC6 ib [((_64b | compat) & sse2)] (alternate: avx => vshufpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shufpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shufpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shufpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shufpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shufpd_a<R>> for Inst<R> {
    fn from(inst: shufpd_a<R>) -> Self {
        Self::shufpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vshufpd: B(xmm1[w], xmm2, xmm_m128, imm8) => VEX.128.66.0F.WIG 0xC6 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vshufpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vshufpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vshufpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc6); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vshufpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vshufpd_b<R>> for Inst<R> {
    fn from(inst: vshufpd_b<R>) -> Self {
        Self::vshufpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shufps: A(xmm1[rw], xmm_m128[align], imm8) => 0x0F + 0xC6 ib [((_64b | compat) & sse)] (alternate: avx => vshufps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shufps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shufps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shufps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xc6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shufps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shufps_a<R>> for Inst<R> {
    fn from(inst: shufps_a<R>) -> Self {
        Self::shufps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vshufps: B(xmm1[w], xmm2, xmm_m128, imm8) => VEX.128.0F.WIG 0xC6 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vshufps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vshufps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vshufps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xc6); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vshufps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vshufps_b<R>> for Inst<R> {
    fn from(inst: vshufps_b<R>) -> Self {
        Self::vshufps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pshufb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x00 [((_64b | compat) & ssse3)] (alternate: avx => vpshufb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pshufb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pshufb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pshufb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x0); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pshufb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pshufb_a<R>> for Inst<R> {
    fn from(inst: pshufb_a<R>) -> Self {
        Self::pshufb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pshufd: A(xmm1[w], xmm_m128[align], imm8) => 0x66 + 0x0F + 0x70 /r ib [((_64b | compat) & sse2)] (alternate: avx => vpshufd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pshufd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pshufd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pshufd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pshufd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pshufd_a<R>> for Inst<R> {
    fn from(inst: pshufd_a<R>) -> Self {
        Self::pshufd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pshuflw: A(xmm1[w], xmm_m128[align], imm8) => 0xF2 + 0x0F + 0x70 /r ib [((_64b | compat) & sse2)] (alternate: avx => vpshuflw_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pshuflw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pshuflw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pshuflw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pshuflw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pshuflw_a<R>> for Inst<R> {
    fn from(inst: pshuflw_a<R>) -> Self {
        Self::pshuflw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pshufhw: A(xmm1[w], xmm_m128[align], imm8) => 0xF3 + 0x0F + 0x70 /r ib [((_64b | compat) & sse2)] (alternate: avx => vpshufhw_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pshufhw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pshufhw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pshufhw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pshufhw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pshufhw_a<R>> for Inst<R> {
    fn from(inst: pshufhw_a<R>) -> Self {
        Self::pshufhw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpshufb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x00 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpshufb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpshufb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpshufb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x0); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpshufb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpshufb_b<R>> for Inst<R> {
    fn from(inst: vpshufb_b<R>) -> Self {
        Self::vpshufb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpshufd: A(xmm1[w], xmm_m128, imm8) => VEX.128.66.0F.WIG 0x70 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpshufd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpshufd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpshufd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpshufd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpshufd_a<R>> for Inst<R> {
    fn from(inst: vpshufd_a<R>) -> Self {
        Self::vpshufd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpshuflw: A(xmm1[w], xmm_m128, imm8) => VEX.128.F2.0F.WIG 0x70 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpshuflw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpshuflw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpshuflw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpshuflw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpshuflw_a<R>> for Inst<R> {
    fn from(inst: vpshuflw_a<R>) -> Self {
        Self::vpshuflw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpshufhw: A(xmm1[w], xmm_m128, imm8) => VEX.128.F3.0F.WIG 0x70 /r ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpshufhw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpshufhw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpshufhw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x70); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpshufhw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpshufhw_a<R>> for Inst<R> {
    fn from(inst: vpshufhw_a<R>) -> Self {
        Self::vpshufhw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vbroadcastss: A_M(xmm1[w], m32) => VEX.128.66.0F38.W0 0x18 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vbroadcastss_a_m<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vbroadcastss_a_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, m32: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vbroadcastss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x18); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vbroadcastss_a_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vbroadcastss_a_m<R>> for Inst<R> {
    fn from(inst: vbroadcastss_a_m<R>) -> Self {
        Self::vbroadcastss_a_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vbroadcastss: A_R(xmm1[w], xmm2) => VEX.128.66.0F38.W0 0x18 /r [((_64b | compat) & avx2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vbroadcastss_a_r<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vbroadcastss_a_r<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vbroadcastss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:412
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:413
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:414
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x18); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vbroadcastss_a_r<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vbroadcastss_a_r<R>> for Inst<R> {
    fn from(inst: vbroadcastss_a_r<R>) -> Self {
        Self::vbroadcastss_a_r(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpbroadcastb: A(xmm1[w], xmm_m8) => VEX.128.66.0F38.W0 0x78 /r [((_64b | compat) & avx2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpbroadcastb_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m8: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpbroadcastb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m8: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m8: xmm_m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpbroadcastb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m8) = &self.xmm_m8 {
            if let Some(trap_code) = xmm_m8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m8.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x78); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpbroadcastb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m8 = self.xmm_m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpbroadcastb_a<R>> for Inst<R> {
    fn from(inst: vpbroadcastb_a<R>) -> Self {
        Self::vpbroadcastb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpbroadcastw: A(xmm1[w], xmm_m16) => VEX.128.66.0F38.W0 0x79 /r [((_64b | compat) & avx2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpbroadcastw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m16: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpbroadcastw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m16: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m16: xmm_m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpbroadcastw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m16) = &self.xmm_m16 {
            if let Some(trap_code) = xmm_m16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m16.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x79); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpbroadcastw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m16 = self.xmm_m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m16}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpbroadcastw_a<R>> for Inst<R> {
    fn from(inst: vpbroadcastw_a<R>) -> Self {
        Self::vpbroadcastw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpbroadcastd: A(xmm1[w], xmm_m32) => VEX.128.66.0F38.W0 0x58 /r [((_64b | compat) & avx2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpbroadcastd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpbroadcastd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpbroadcastd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x58); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpbroadcastd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpbroadcastd_a<R>> for Inst<R> {
    fn from(inst: vpbroadcastd_a<R>) -> Self {
        Self::vpbroadcastd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpbroadcastq: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.W0 0x59 /r [((_64b | compat) & avx2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpbroadcastq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpbroadcastq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpbroadcastq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpbroadcastq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpbroadcastq_a<R>> for Inst<R> {
    fn from(inst: vpbroadcastq_a<R>) -> Self {
        Self::vpbroadcastq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpermi2b: A(xmm1[rw], xmm2, xmm_m128) => EVEX.128.66.0F38.W0 0x75 /r [(((_64b | compat) & avx512vl) & avx512vbmi)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpermi2b_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpermi2b_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpermi2b") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x75); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512vbmi() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512vbmi); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpermi2b_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpermi2b_a<R>> for Inst<R> {
    fn from(inst: vpermi2b_a<R>) -> Self {
        Self::vpermi2b_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `maxss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x5F /r [((_64b | compat) & sse)] (alternate: avx => vmaxss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct maxss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> maxss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("maxss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for maxss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<maxss_a<R>> for Inst<R> {
    fn from(inst: maxss_a<R>) -> Self {
        Self::maxss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `maxsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x5F /r [((_64b | compat) & sse2)] (alternate: avx => vmaxsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct maxsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> maxsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("maxsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for maxsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<maxsd_a<R>> for Inst<R> {
    fn from(inst: maxsd_a<R>) -> Self {
        Self::maxsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `maxps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x5F /r [((_64b | compat) & sse)] (alternate: avx => vmaxps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct maxps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> maxps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("maxps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for maxps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<maxps_a<R>> for Inst<R> {
    fn from(inst: maxps_a<R>) -> Self {
        Self::maxps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `maxpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x5F /r [((_64b | compat) & sse2)] (alternate: avx => vmaxpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct maxpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> maxpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("maxpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for maxpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<maxpd_a<R>> for Inst<R> {
    fn from(inst: maxpd_a<R>) -> Self {
        Self::maxpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmaxss: B(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x5F /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmaxss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmaxss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmaxss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmaxss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmaxss_b<R>> for Inst<R> {
    fn from(inst: vmaxss_b<R>) -> Self {
        Self::vmaxss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmaxsd: B(xmm1[w], xmm2, xmm_m64) => VEX.LIG.F2.0F.WIG 0x5F /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmaxsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmaxsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmaxsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmaxsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmaxsd_b<R>> for Inst<R> {
    fn from(inst: vmaxsd_b<R>) -> Self {
        Self::vmaxsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmaxps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x5F /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmaxps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmaxps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmaxps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmaxps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmaxps_b<R>> for Inst<R> {
    fn from(inst: vmaxps_b<R>) -> Self {
        Self::vmaxps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmaxpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x5F /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmaxpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmaxpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmaxpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmaxpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmaxpd_b<R>> for Inst<R> {
    fn from(inst: vmaxpd_b<R>) -> Self {
        Self::vmaxpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaxsb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x3C /r [((_64b | compat) & sse41)] (alternate: avx => vpmaxsb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaxsb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaxsb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaxsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x3c); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaxsb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaxsb_a<R>> for Inst<R> {
    fn from(inst: pmaxsb_a<R>) -> Self {
        Self::pmaxsb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaxsw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xEE /r [((_64b | compat) & sse2)] (alternate: avx => vpmaxsw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaxsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaxsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaxsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xee); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaxsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaxsw_a<R>> for Inst<R> {
    fn from(inst: pmaxsw_a<R>) -> Self {
        Self::pmaxsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaxsd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x3D /r [((_64b | compat) & sse41)] (alternate: avx => vpmaxsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaxsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaxsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaxsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x3d); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaxsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaxsd_a<R>> for Inst<R> {
    fn from(inst: pmaxsd_a<R>) -> Self {
        Self::pmaxsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaxub: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xDE /r [((_64b | compat) & sse2)] (alternate: avx => vpmaxub_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaxub_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaxub_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaxub") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xde); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaxub_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaxub_a<R>> for Inst<R> {
    fn from(inst: pmaxub_a<R>) -> Self {
        Self::pmaxub_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaxuw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x3E /r [((_64b | compat) & sse41)] (alternate: avx => vpmaxuw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaxuw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaxuw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaxuw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x3e); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaxuw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaxuw_a<R>> for Inst<R> {
    fn from(inst: pmaxuw_a<R>) -> Self {
        Self::pmaxuw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaxud: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x3F /r [((_64b | compat) & sse41)] (alternate: avx => vpmaxud_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaxud_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaxud_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaxud") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x3f); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaxud_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaxud_a<R>> for Inst<R> {
    fn from(inst: pmaxud_a<R>) -> Self {
        Self::pmaxud_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaxsb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x3C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaxsb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaxsb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaxsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x3c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaxsb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaxsb_b<R>> for Inst<R> {
    fn from(inst: vpmaxsb_b<R>) -> Self {
        Self::vpmaxsb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaxsw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xEE /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaxsw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaxsw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaxsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xee); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaxsw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaxsw_b<R>> for Inst<R> {
    fn from(inst: vpmaxsw_b<R>) -> Self {
        Self::vpmaxsw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaxsd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x3D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaxsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaxsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaxsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x3d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaxsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaxsd_b<R>> for Inst<R> {
    fn from(inst: vpmaxsd_b<R>) -> Self {
        Self::vpmaxsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaxub: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xDE /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaxub_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaxub_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaxub") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xde); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaxub_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaxub_b<R>> for Inst<R> {
    fn from(inst: vpmaxub_b<R>) -> Self {
        Self::vpmaxub_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaxuw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x3E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaxuw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaxuw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaxuw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x3e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaxuw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaxuw_b<R>> for Inst<R> {
    fn from(inst: vpmaxuw_b<R>) -> Self {
        Self::vpmaxuw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaxud: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x3F /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaxud_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaxud_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaxud") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x3f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaxud_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaxud_b<R>> for Inst<R> {
    fn from(inst: vpmaxud_b<R>) -> Self {
        Self::vpmaxud_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `minss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x5D /r [((_64b | compat) & sse)] (alternate: avx => vminss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct minss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> minss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("minss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for minss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<minss_a<R>> for Inst<R> {
    fn from(inst: minss_a<R>) -> Self {
        Self::minss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `minsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x5D /r [((_64b | compat) & sse2)] (alternate: avx => vminsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct minsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> minsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("minsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for minsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<minsd_a<R>> for Inst<R> {
    fn from(inst: minsd_a<R>) -> Self {
        Self::minsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `minps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x5D /r [((_64b | compat) & sse)] (alternate: avx => vminps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct minps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> minps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("minps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for minps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<minps_a<R>> for Inst<R> {
    fn from(inst: minps_a<R>) -> Self {
        Self::minps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `minpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x5D /r [((_64b | compat) & sse2)] (alternate: avx => vminpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct minpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> minpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("minpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for minpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<minpd_a<R>> for Inst<R> {
    fn from(inst: minpd_a<R>) -> Self {
        Self::minpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vminss: B(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x5D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vminss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vminss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vminss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vminss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vminss_b<R>> for Inst<R> {
    fn from(inst: vminss_b<R>) -> Self {
        Self::vminss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vminsd: B(xmm1[w], xmm2, xmm_m64) => VEX.LIG.F2.0F.WIG 0x5D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vminsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vminsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vminsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vminsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vminsd_b<R>> for Inst<R> {
    fn from(inst: vminsd_b<R>) -> Self {
        Self::vminsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vminps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x5D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vminps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vminps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vminps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vminps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vminps_b<R>> for Inst<R> {
    fn from(inst: vminps_b<R>) -> Self {
        Self::vminps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vminpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x5D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vminpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vminpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vminpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vminpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vminpd_b<R>> for Inst<R> {
    fn from(inst: vminpd_b<R>) -> Self {
        Self::vminpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pminsb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x38 /r [((_64b | compat) & sse41)] (alternate: avx => vpminsb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pminsb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pminsb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pminsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pminsb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pminsb_a<R>> for Inst<R> {
    fn from(inst: pminsb_a<R>) -> Self {
        Self::pminsb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pminsw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xEA /r [((_64b | compat) & sse2)] (alternate: avx => vpminsw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pminsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pminsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pminsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xea); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pminsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pminsw_a<R>> for Inst<R> {
    fn from(inst: pminsw_a<R>) -> Self {
        Self::pminsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pminsd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x39 /r [((_64b | compat) & sse41)] (alternate: avx => vpminsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pminsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pminsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pminsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x39); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pminsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pminsd_a<R>> for Inst<R> {
    fn from(inst: pminsd_a<R>) -> Self {
        Self::pminsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pminub: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xDA /r [((_64b | compat) & sse2)] (alternate: avx => vpminub_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pminub_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pminub_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pminub") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xda); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pminub_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pminub_a<R>> for Inst<R> {
    fn from(inst: pminub_a<R>) -> Self {
        Self::pminub_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pminuw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x3A /r [((_64b | compat) & sse41)] (alternate: avx => vpminuw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pminuw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pminuw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pminuw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pminuw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pminuw_a<R>> for Inst<R> {
    fn from(inst: pminuw_a<R>) -> Self {
        Self::pminuw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pminud: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x3B /r [((_64b | compat) & sse41)] (alternate: avx => vpminud_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pminud_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pminud_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pminud") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x3b); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pminud_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pminud_a<R>> for Inst<R> {
    fn from(inst: pminud_a<R>) -> Self {
        Self::pminud_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpminsb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x38 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpminsb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpminsb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpminsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpminsb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpminsb_b<R>> for Inst<R> {
    fn from(inst: vpminsb_b<R>) -> Self {
        Self::vpminsb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpminsw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xEA /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpminsw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpminsw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpminsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xea); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpminsw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpminsw_b<R>> for Inst<R> {
    fn from(inst: vpminsw_b<R>) -> Self {
        Self::vpminsw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpminsd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x39 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpminsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpminsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpminsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x39); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpminsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpminsd_b<R>> for Inst<R> {
    fn from(inst: vpminsd_b<R>) -> Self {
        Self::vpminsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpminub: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xDA /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpminub_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpminub_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpminub") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xda); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpminub_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpminub_b<R>> for Inst<R> {
    fn from(inst: vpminub_b<R>) -> Self {
        Self::vpminub_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpminuw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x3A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpminuw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpminuw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpminuw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpminuw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpminuw_b<R>> for Inst<R> {
    fn from(inst: vpminuw_b<R>) -> Self {
        Self::vpminuw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpminud: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x3B /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpminud_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpminud_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpminud") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x3b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpminud_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpminud_b<R>> for Inst<R> {
    fn from(inst: vpminud_b<R>) -> Self {
        Self::vpminud_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mfence: ZO() => 0x0F + 0xAE 0xF0 [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct mfence_zo  {
}
impl mfence_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mfence") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xae); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xf0); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for mfence_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<mfence_zo> for Inst<R> {
    fn from(inst: mfence_zo) -> Self {
        Self::mfence_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sfence: ZO() => 0x0F + 0xAE 0xF8 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct sfence_zo  {
}
impl sfence_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sfence") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xae); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xf8); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for sfence_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<sfence_zo> for Inst<R> {
    fn from(inst: sfence_zo) -> Self {
        Self::sfence_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lfence: ZO() => 0x0F + 0xAE 0xE8 [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct lfence_zo  {
}
impl lfence_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("lfence") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xae); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xe8); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for lfence_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<lfence_zo> for Inst<R> {
    fn from(inst: lfence_zo) -> Self {
        Self::lfence_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `hlt: ZO() => 0xF4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct hlt_zo  {
}
impl hlt_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("hlt") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xf4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for hlt_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<hlt_zo> for Inst<R> {
    fn from(inst: hlt_zo) -> Self {
        Self::hlt_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `ud2: ZO() => 0x0F + 0x0B [(_64b | compat)] has_trap` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct ud2_zo  {
    pub trap: TrapCode, // cranelift/assembler-x64/meta/src/generate/inst.rs:27
}
impl ud2_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(trap: impl Into<TrapCode>) -> Self {
        Self {
            trap: trap.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:97
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("ud2") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        buf.add_trap(self.trap); // cranelift/assembler-x64/meta/src/generate/inst.rs:146

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for ud2_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<ud2_zo> for Inst<R> {
    fn from(inst: ud2_zo) -> Self {
        Self::ud2_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `int3: ZO() => 0xCC [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct int3_zo  {
}
impl int3_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("int3") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xcc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for int3_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<int3_zo> for Inst<R> {
    fn from(inst: int3_zo) -> Self {
        Self::int3_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `retq: ZO() => 0xC3 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct retq_zo  {
}
impl retq_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("retq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xc3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for retq_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<retq_zo> for Inst<R> {
    fn from(inst: retq_zo) -> Self {
        Self::retq_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `retq: I(imm16) => 0xC2 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct retq_i  {
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl retq_i {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm16: impl Into<Imm16>) -> Self {
        Self {
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("retq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xc2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for retq_i {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<retq_i> for Inst<R> {
    fn from(inst: retq_i) -> Self {
        Self::retq_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `leaw: RM(r16[w], m16) => 0x66 + 0x8D /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct leaw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> leaw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, m16: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("leaw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for leaw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<leaw_rm<R>> for Inst<R> {
    fn from(inst: leaw_rm<R>) -> Self {
        Self::leaw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `leal: RM(r32[w], m32) => 0x8D /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct leal_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> leal_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, m32: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("leal") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for leal_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<leal_rm<R>> for Inst<R> {
    fn from(inst: leal_rm<R>) -> Self {
        Self::leal_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `leaq: RM(r64[w], m64) => REX.W + 0x8D /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct leaq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> leaq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, m64: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("leaq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for leaq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<leaq_rm<R>> for Inst<R> {
    fn from(inst: leaq_rm<R>) -> Self {
        Self::leaq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `callq: D(imm32[sxl]) => 0xE8 id [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct callq_d  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl callq_d {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("callq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0xe8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for callq_d {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::callq_d(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<callq_d> for Inst<R> {
    fn from(inst: callq_d) -> Self {
        Self::callq_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `callq: M(rm64) => 0xFF /2 [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct callq_m<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> callq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("callq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xff); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for callq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::callq_m(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<callq_m<R>> for Inst<R> {
    fn from(inst: callq_m<R>) -> Self {
        Self::callq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movb: MR(rm8[w], r8) => 0x88 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movb_mr<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x88); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movb_mr<R>> for Inst<R> {
    fn from(inst: movb_mr<R>) -> Self {
        Self::movb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movw: MR(rm16[w], r16) => 0x66 + 0x89 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movw_mr<R> where R: Registers {
    pub rm16: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x89); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movw_mr<R>> for Inst<R> {
    fn from(inst: movw_mr<R>) -> Self {
        Self::movw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movl: MR(rm32[w], r32) => 0x89 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movl_mr<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x89); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movl_mr<R>> for Inst<R> {
    fn from(inst: movl_mr<R>) -> Self {
        Self::movl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movq: MR(rm64[w], r64) => REX.W + 0x89 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movq_mr<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x89); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movq_mr<R>> for Inst<R> {
    fn from(inst: movq_mr<R>) -> Self {
        Self::movq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movb: RM(r8[w], rm8) => 0x8A /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movb_rm<R> where R: Registers {
    pub r8: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movb_rm<R>> for Inst<R> {
    fn from(inst: movb_rm<R>) -> Self {
        Self::movb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movw: RM(r16[w], rm16) => 0x66 + 0x8B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movw_rm<R>> for Inst<R> {
    fn from(inst: movw_rm<R>) -> Self {
        Self::movw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movl: RM(r32[w], rm32) => 0x8B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movl_rm<R>> for Inst<R> {
    fn from(inst: movl_rm<R>) -> Self {
        Self::movl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movq: RM(r64[w], rm64) => REX.W + 0x8B /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movq_rm<R>> for Inst<R> {
    fn from(inst: movq_rm<R>) -> Self {
        Self::movq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movb: OI(r8[w], imm8) => 0xB0 +rb ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movb_oi<R> where R: Registers {
    pub r8: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movb_oi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::WriteGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:173
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:174
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r8.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0xb0 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movb_oi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movb_oi<R>> for Inst<R> {
    fn from(inst: movb_oi<R>) -> Self {
        Self::movb_oi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movw: OI(r16[w], imm16) => 0x66 + 0xB8 +rw iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movw_oi<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movw_oi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:173
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:174
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r16.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0xb8 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movw_oi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movw_oi<R>> for Inst<R> {
    fn from(inst: movw_oi<R>) -> Self {
        Self::movw_oi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movl: OI(r32[w], imm32) => 0xB8 +rd id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movl_oi<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movl_oi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:173
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:174
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r32.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0xb8 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movl_oi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movl_oi<R>> for Inst<R> {
    fn from(inst: movl_oi<R>) -> Self {
        Self::movl_oi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movabsq: OI(r64[w], imm64) => REX.W + 0xB8 +ro io [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movabsq_oi<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm64: Imm64, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movabsq_oi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, imm64: impl Into<Imm64>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm64: imm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movabsq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:173
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:174
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r64.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0xb8 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm64.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movabsq_oi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm64 = self.imm64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movabsq_oi<R>> for Inst<R> {
    fn from(inst: movabsq_oi<R>) -> Self {
        Self::movabsq_oi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movb: MI(rm8[w], imm8) => 0xC6 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movb_mi<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movb_mi<R>> for Inst<R> {
    fn from(inst: movb_mi<R>) -> Self {
        Self::movb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movw: MI(rm16[w], imm16) => 0x66 + 0xC7 /0 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movw_mi<R> where R: Registers {
    pub rm16: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movw_mi<R>> for Inst<R> {
    fn from(inst: movw_mi<R>) -> Self {
        Self::movw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movl: MI(rm32[w], imm32) => 0xC7 /0 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movl_mi<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movl_mi<R>> for Inst<R> {
    fn from(inst: movl_mi<R>) -> Self {
        Self::movl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movq: MI_SXL(rm64[w], imm32[sxq]) => REX.W + 0xC7 /0 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movq_mi_sxl<R>> for Inst<R> {
    fn from(inst: movq_mi_sxl<R>) -> Self {
        Self::movq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsbw: RM(r16[w], rm8[sxw]) => 0x66 + 0x0F + 0xBE /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsbw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsbw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbe); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsbw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsbw_rm<R>> for Inst<R> {
    fn from(inst: movsbw_rm<R>) -> Self {
        Self::movsbw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsbl: RM(r32[w], rm8[sxl]) => 0x0F + 0xBE /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsbl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsbl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbe); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsbl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsbl_rm<R>> for Inst<R> {
    fn from(inst: movsbl_rm<R>) -> Self {
        Self::movsbl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsbq: RM(r64[w], rm8[sxq]) => REX.W + 0x0F + 0xBE /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsbq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsbq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbe); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsbq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsbq_rm<R>> for Inst<R> {
    fn from(inst: movsbq_rm<R>) -> Self {
        Self::movsbq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsww: RM(r16[w], rm16[sxl]) => 0x66 + 0x0F + 0xBF /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsww_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsww_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsww") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsww_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsww_rm<R>> for Inst<R> {
    fn from(inst: movsww_rm<R>) -> Self {
        Self::movsww_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movswl: RM(r32[w], rm16[sxl]) => 0x0F + 0xBF /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movswl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movswl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movswl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movswl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movswl_rm<R>> for Inst<R> {
    fn from(inst: movswl_rm<R>) -> Self {
        Self::movswl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movswq: RM(r64[w], rm16[sxq]) => REX.W + 0x0F + 0xBF /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movswq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movswq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movswq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xbf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movswq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movswq_rm<R>> for Inst<R> {
    fn from(inst: movswq_rm<R>) -> Self {
        Self::movswq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movslq: RM(r64[w], rm32[sxl]) => REX.W + 0x63 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movslq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movslq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movslq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x63); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movslq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movslq_rm<R>> for Inst<R> {
    fn from(inst: movslq_rm<R>) -> Self {
        Self::movslq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movzbw: RM(r16[w], rm8[sxw]) => 0x66 + 0x0F + 0xB6 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movzbw_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movzbw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movzbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movzbw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movzbw_rm<R>> for Inst<R> {
    fn from(inst: movzbw_rm<R>) -> Self {
        Self::movzbw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movzbl: RM(r32[w], rm8[sxl]) => 0x0F + 0xB6 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movzbl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movzbl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movzbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movzbl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movzbl_rm<R>> for Inst<R> {
    fn from(inst: movzbl_rm<R>) -> Self {
        Self::movzbl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movzbq: RM(r64[w], rm8[sxq]) => REX.W + 0x0F + 0xB6 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movzbq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movzbq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movzbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movzbq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movzbq_rm<R>> for Inst<R> {
    fn from(inst: movzbq_rm<R>) -> Self {
        Self::movzbq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movzww: RM(r16[w], rm16[sxl]) => 0x66 + 0x0F + 0xB7 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movzww_rm<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movzww_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movzww") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movzww_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movzww_rm<R>> for Inst<R> {
    fn from(inst: movzww_rm<R>) -> Self {
        Self::movzww_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movzwl: RM(r32[w], rm16[sxl]) => 0x0F + 0xB7 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movzwl_rm<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movzwl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movzwl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movzwl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movzwl_rm<R>> for Inst<R> {
    fn from(inst: movzwl_rm<R>) -> Self {
        Self::movzwl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movzwq: RM(r64[w], rm16[sxq]) => REX.W + 0x0F + 0xB7 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movzwq_rm<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movzwq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movzwq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xb7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movzwq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movzwq_rm<R>> for Inst<R> {
    fn from(inst: movzwq_rm<R>) -> Self {
        Self::movzwq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movd: A(xmm1[w], rm32) => 0x66 + 0x0F + 0x6E /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movd_a<R>> for Inst<R> {
    fn from(inst: movd_a<R>) -> Self {
        Self::movd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movq: A(xmm1[w], rm64) => 0x66 + REX.W + 0x0F + 0x6E /r [(_64b & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movq_a<R>> for Inst<R> {
    fn from(inst: movq_a<R>) -> Self {
        Self::movq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movd: B(rm32[w], xmm2) => 0x66 + 0x0F + 0x7E /r [((_64b | compat) & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movd_b<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x7e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movd_b<R>> for Inst<R> {
    fn from(inst: movd_b<R>) -> Self {
        Self::movd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movq: B(rm64[w], xmm2) => 0x66 + REX.W + 0x0F + 0x7E /r [(_64b & sse2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movq_b<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x7e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movq_b<R>> for Inst<R> {
    fn from(inst: movq_b<R>) -> Self {
        Self::movq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovd: A(xmm1[w], rm32) => VEX.128.66.0F.W0 0x6E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovd_a<R>> for Inst<R> {
    fn from(inst: vmovd_a<R>) -> Self {
        Self::vmovd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovq: A(xmm1[w], rm64) => VEX.128.66.0F.W1 0x6E /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovq_a<R>> for Inst<R> {
    fn from(inst: vmovq_a<R>) -> Self {
        Self::vmovq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovd: B(rm32[w], xmm2) => VEX.128.66.0F.W0 0x7E /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovd_b<R> where R: Registers {
    pub rm32: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x7e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovd_b<R>> for Inst<R> {
    fn from(inst: vmovd_b<R>) -> Self {
        Self::vmovd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovq: B(rm64[w], xmm2) => VEX.128.66.0F.W1 0x7E /r [(_64b & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovq_b<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x7e); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovq_b<R>> for Inst<R> {
    fn from(inst: vmovq_b<R>) -> Self {
        Self::vmovq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movss: A_M(xmm1[w], m32) => 0xF3 + 0x0F + 0x10 /r [((compat | _64b) | sse)] (alternate: avx => vmovss_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movss_a_m<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movss_a_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, m32: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movss_a_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movss_a_m<R>> for Inst<R> {
    fn from(inst: movss_a_m<R>) -> Self {
        Self::movss_a_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movss: A_R(xmm1[rw], xmm2) => 0xF3 + 0x0F + 0x10 /r [((compat | _64b) | sse)] (alternate: avx => vmovss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movss_a_r<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movss_a_r<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movss_a_r<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movss_a_r<R>> for Inst<R> {
    fn from(inst: movss_a_r<R>) -> Self {
        Self::movss_a_r(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movss: C_M(m32[w], xmm1) => 0xF3 + 0x0F + 0x11 /r [((compat | _64b) | sse)] (alternate: avx => vmovss_c_m)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movss_c_m<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movss_c_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movss_c_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movss_c_m<R>> for Inst<R> {
    fn from(inst: movss_c_m<R>) -> Self {
        Self::movss_c_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsd: A_M(xmm1[w], m64) => 0xF2 + 0x0F + 0x10 /r [((compat | _64b) | sse2)] (alternate: avx => vmovsd_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsd_a_m<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsd_a_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, m64: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsd_a_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsd_a_m<R>> for Inst<R> {
    fn from(inst: movsd_a_m<R>) -> Self {
        Self::movsd_a_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsd: A_R(xmm1[rw], xmm2) => 0xF2 + 0x0F + 0x10 /r [((compat | _64b) | sse2)] (alternate: avx => vmovsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsd_a_r<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsd_a_r<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:207
        let rm = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:208
        let rex = RexPrefix::two_op(reg, rm, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:209
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsd_a_r<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsd_a_r<R>> for Inst<R> {
    fn from(inst: movsd_a_r<R>) -> Self {
        Self::movsd_a_r(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movsd: C_M(m64[w], xmm1) => 0xF2 + 0x0F + 0x11 /r [((compat | _64b) | sse2)] (alternate: avx => vmovsd_c_m)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movsd_c_m<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movsd_c_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movsd_c_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movsd_c_m<R>> for Inst<R> {
    fn from(inst: movsd_c_m<R>) -> Self {
        Self::movsd_c_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovss: D(xmm1[w], m32) => VEX.LIG.F3.0F.WIG 0x10 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovss_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovss_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, m32: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovss_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovss_d<R>> for Inst<R> {
    fn from(inst: vmovss_d<R>) -> Self {
        Self::vmovss_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovss: B(xmm1[w], xmm2, xmm3) => VEX.LIG.F3.0F.WIG 0x10 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm3: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm3: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm3: xmm3.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:314
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:315
        let rm = self.xmm3.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:316
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:317
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm3.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm3.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm3 = self.xmm3.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm3}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovss_b<R>> for Inst<R> {
    fn from(inst: vmovss_b<R>) -> Self {
        Self::vmovss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovss: C_M(m32[w], xmm1) => VEX.LIG.F3.0F.WIG 0x11 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovss_c_m<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovss_c_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovss_c_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovss_c_m<R>> for Inst<R> {
    fn from(inst: vmovss_c_m<R>) -> Self {
        Self::vmovss_c_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovsd: D(xmm1[w], m64) => VEX.LIG.F2.0F.WIG 0x10 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovsd_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovsd_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, m64: impl Into<Amode<R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovsd_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovsd_d<R>> for Inst<R> {
    fn from(inst: vmovsd_d<R>) -> Self {
        Self::vmovsd_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovsd: B(xmm1[w], xmm2, xmm3) => VEX.LIG.F2.0F.WIG 0x10 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm3: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm3: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm3: xmm3.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:314
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:315
        let rm = self.xmm3.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:316
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:317
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:481
        self.xmm3.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm3.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm3 = self.xmm3.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm3}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovsd_b<R>> for Inst<R> {
    fn from(inst: vmovsd_b<R>) -> Self {
        Self::vmovsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovsd: C_M(m64[w], xmm1) => VEX.LIG.F2.0F.WIG 0x11 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovsd_c_m<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovsd_c_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:424
        let rm = self.m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:425
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:426
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovsd_c_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovsd_c_m<R>> for Inst<R> {
    fn from(inst: vmovsd_c_m<R>) -> Self {
        Self::vmovsd_c_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movapd: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x28 /r [((compat | _64b) | sse2)] (alternate: avx => vmovapd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movapd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movapd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movapd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movapd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movapd_a<R>> for Inst<R> {
    fn from(inst: movapd_a<R>) -> Self {
        Self::movapd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movapd: B(xmm_m128[w,align], xmm1) => 0x66 + 0x0F + 0x29 /r [((compat | _64b) | sse2)] (alternate: avx => vmovapd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movapd_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movapd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movapd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movapd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movapd_b<R>> for Inst<R> {
    fn from(inst: movapd_b<R>) -> Self {
        Self::movapd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movaps: A(xmm1[w], xmm_m128[align]) => 0x0F + 0x28 /r [((compat | _64b) | sse)] (alternate: avx => vmovaps_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movaps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movaps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movaps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movaps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movaps_a<R>> for Inst<R> {
    fn from(inst: movaps_a<R>) -> Self {
        Self::movaps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movaps: B(xmm_m128[w,align], xmm1) => 0x0F + 0x29 /r [((compat | _64b) | sse)] (alternate: avx => vmovaps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movaps_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movaps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movaps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movaps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movaps_b<R>> for Inst<R> {
    fn from(inst: movaps_b<R>) -> Self {
        Self::movaps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movdqa: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x6F /r [((compat | _64b) | sse2)] (alternate: avx => vmovdqa_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movdqa_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movdqa_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movdqa") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movdqa_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movdqa_a<R>> for Inst<R> {
    fn from(inst: movdqa_a<R>) -> Self {
        Self::movdqa_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movdqa: B(xmm_m128[w,align], xmm1) => 0x66 + 0x0F + 0x7F /r [((compat | _64b) | sse2)] (alternate: avx => vmovdqa_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movdqa_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movdqa_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movdqa") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x7f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movdqa_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movdqa_b<R>> for Inst<R> {
    fn from(inst: movdqa_b<R>) -> Self {
        Self::movdqa_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovapd: A(xmm1[w], xmm_m128[align]) => VEX.128.66.0F.WIG 0x28 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovapd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovapd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovapd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovapd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovapd_a<R>> for Inst<R> {
    fn from(inst: vmovapd_a<R>) -> Self {
        Self::vmovapd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovapd: B(xmm_m128[w,align], xmm1) => VEX.128.66.0F.WIG 0x29 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovapd_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovapd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovapd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovapd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovapd_b<R>> for Inst<R> {
    fn from(inst: vmovapd_b<R>) -> Self {
        Self::vmovapd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovaps: A(xmm1[w], xmm_m128[align]) => VEX.128.0F.WIG 0x28 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovaps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovaps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovaps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovaps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovaps_a<R>> for Inst<R> {
    fn from(inst: vmovaps_a<R>) -> Self {
        Self::vmovaps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovaps: B(xmm_m128[w,align], xmm1) => VEX.128.0F.WIG 0x29 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovaps_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovaps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovaps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovaps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovaps_b<R>> for Inst<R> {
    fn from(inst: vmovaps_b<R>) -> Self {
        Self::vmovaps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovdqa: A(xmm1[w], xmm_m128[align]) => VEX.128.66.0F.WIG 0x6F /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovdqa_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovdqa_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovdqa") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovdqa_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovdqa_a<R>> for Inst<R> {
    fn from(inst: vmovdqa_a<R>) -> Self {
        Self::vmovdqa_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovdqa: B(xmm_m128[w,align], xmm1) => VEX.128.66.0F.WIG 0x7F /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovdqa_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovdqa_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovdqa") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x7f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovdqa_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovdqa_b<R>> for Inst<R> {
    fn from(inst: vmovdqa_b<R>) -> Self {
        Self::vmovdqa_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movupd: A(xmm1[w], xmm_m128) => 0x66 + 0x0F + 0x10 /r [((compat | _64b) | sse2)] (alternate: avx => vmovupd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movupd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movupd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movupd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movupd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movupd_a<R>> for Inst<R> {
    fn from(inst: movupd_a<R>) -> Self {
        Self::movupd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movupd: B(xmm_m128[w], xmm1) => 0x66 + 0x0F + 0x11 /r [((compat | _64b) | sse2)] (alternate: avx => vmovupd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movupd_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movupd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movupd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movupd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movupd_b<R>> for Inst<R> {
    fn from(inst: movupd_b<R>) -> Self {
        Self::movupd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movups: A(xmm1[w], xmm_m128) => 0x0F + 0x10 /r [((compat | _64b) | sse)] (alternate: avx => vmovups_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movups_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movups_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movups") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movups_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movups_a<R>> for Inst<R> {
    fn from(inst: movups_a<R>) -> Self {
        Self::movups_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movups: B(xmm_m128[w], xmm1) => 0x0F + 0x11 /r [((compat | _64b) | sse)] (alternate: avx => vmovups_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movups_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movups_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movups") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movups_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movups_b<R>> for Inst<R> {
    fn from(inst: movups_b<R>) -> Self {
        Self::movups_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movdqu: A(xmm1[w], xmm_m128) => 0xF3 + 0x0F + 0x6F /r [((compat | _64b) | sse2)] (alternate: avx => vmovdqu_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movdqu_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movdqu_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movdqu") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movdqu_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movdqu_a<R>> for Inst<R> {
    fn from(inst: movdqu_a<R>) -> Self {
        Self::movdqu_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `movdqu: B(xmm_m128[w], xmm1) => 0xF3 + 0x0F + 0x7F /r [((compat | _64b) | sse2)] (alternate: avx => vmovdqu_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct movdqu_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> movdqu_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("movdqu") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x7f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for movdqu_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<movdqu_b<R>> for Inst<R> {
    fn from(inst: movdqu_b<R>) -> Self {
        Self::movdqu_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovupd: A(xmm1[w], xmm_m128) => VEX.128.66.0F.WIG 0x10 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovupd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovupd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovupd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovupd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovupd_a<R>> for Inst<R> {
    fn from(inst: vmovupd_a<R>) -> Self {
        Self::vmovupd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovupd: B(xmm_m128[w], xmm1) => VEX.128.66.0F.WIG 0x11 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovupd_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovupd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovupd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovupd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovupd_b<R>> for Inst<R> {
    fn from(inst: vmovupd_b<R>) -> Self {
        Self::vmovupd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovups: A(xmm1[w], xmm_m128) => VEX.128.0F.WIG 0x10 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovups_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovups_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovups") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x10); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovups_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovups_a<R>> for Inst<R> {
    fn from(inst: vmovups_a<R>) -> Self {
        Self::vmovups_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovups: B(xmm_m128[w], xmm1) => VEX.128.0F.WIG 0x11 /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovups_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovups_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovups") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x11); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovups_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovups_b<R>> for Inst<R> {
    fn from(inst: vmovups_b<R>) -> Self {
        Self::vmovups_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovdqu: A(xmm1[w], xmm_m128) => VEX.128.F3.0F.WIG 0x6F /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovdqu_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovdqu_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovdqu") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovdqu_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovdqu_a<R>> for Inst<R> {
    fn from(inst: vmovdqu_a<R>) -> Self {
        Self::vmovdqu_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmovdqu: B(xmm_m128[w], xmm1) => VEX.128.F3.0F.WIG 0x7F /r [((compat | _64b) | avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmovdqu_b<R> where R: Registers {
    pub xmm_m128: XmmMem<R::WriteXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm1: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmovdqu_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm_m128: impl Into<XmmMem<R::WriteXmm, R::ReadGpr>>, xmm1: impl Into<Xmm<R::ReadXmm>>) -> Self {
        Self {
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmovdqu") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x7f); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features.compat() || features._64b()) || features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmovdqu_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm1}, {xmm_m128}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmovdqu_b<R>> for Inst<R> {
    fn from(inst: vmovdqu_b<R>) -> Self {
        Self::vmovdqu_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovsxbw: A(xmm1[w], xmm_m64) => 0x66 + 0x0F + 0x38 0x20 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovsxbw_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovsxbw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovsxbw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovsxbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x20); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovsxbw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovsxbw_a<R>> for Inst<R> {
    fn from(inst: pmovsxbw_a<R>) -> Self {
        Self::pmovsxbw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovsxbd: A(xmm1[w], xmm_m32) => 0x66 + 0x0F + 0x38 0x21 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovsxbd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovsxbd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovsxbd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovsxbd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovsxbd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovsxbd_a<R>> for Inst<R> {
    fn from(inst: pmovsxbd_a<R>) -> Self {
        Self::pmovsxbd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovsxbq: A(xmm1[w], xmm_m16) => 0x66 + 0x0F + 0x38 0x22 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovsxbq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovsxbq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m16: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovsxbq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m16: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m16: xmm_m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovsxbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m16) = &self.xmm_m16 {
            if let Some(trap_code) = xmm_m16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovsxbq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m16 = self.xmm_m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m16}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovsxbq_a<R>> for Inst<R> {
    fn from(inst: pmovsxbq_a<R>) -> Self {
        Self::pmovsxbq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovsxwd: A(xmm1[w], xmm_m64) => 0x66 + 0x0F + 0x38 0x23 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovsxwd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovsxwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovsxwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovsxwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x23); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovsxwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovsxwd_a<R>> for Inst<R> {
    fn from(inst: pmovsxwd_a<R>) -> Self {
        Self::pmovsxwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovsxwq: A(xmm1[w], xmm_m32) => 0x66 + 0x0F + 0x38 0x24 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovsxwq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovsxwq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovsxwq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovsxwq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x24); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovsxwq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovsxwq_a<R>> for Inst<R> {
    fn from(inst: pmovsxwq_a<R>) -> Self {
        Self::pmovsxwq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovsxdq: A(xmm1[w], xmm_m64) => 0x66 + 0x0F + 0x38 0x25 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovsxdq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovsxdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovsxdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovsxdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x25); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovsxdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovsxdq_a<R>> for Inst<R> {
    fn from(inst: pmovsxdq_a<R>) -> Self {
        Self::pmovsxdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovsxbw: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.WIG 0x20 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovsxbw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovsxbw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovsxbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x20); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovsxbw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovsxbw_a<R>> for Inst<R> {
    fn from(inst: vpmovsxbw_a<R>) -> Self {
        Self::vpmovsxbw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovsxbd: A(xmm1[w], xmm_m32) => VEX.128.66.0F38.WIG 0x21 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovsxbd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovsxbd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovsxbd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x21); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovsxbd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovsxbd_a<R>> for Inst<R> {
    fn from(inst: vpmovsxbd_a<R>) -> Self {
        Self::vpmovsxbd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovsxbq: A(xmm1[w], xmm_m16) => VEX.128.66.0F38.WIG 0x22 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovsxbq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m16: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovsxbq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m16: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m16: xmm_m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovsxbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m16) = &self.xmm_m16 {
            if let Some(trap_code) = xmm_m16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m16.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x22); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovsxbq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m16 = self.xmm_m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m16}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovsxbq_a<R>> for Inst<R> {
    fn from(inst: vpmovsxbq_a<R>) -> Self {
        Self::vpmovsxbq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovsxwd: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.WIG 0x23 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovsxwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovsxwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovsxwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x23); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovsxwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovsxwd_a<R>> for Inst<R> {
    fn from(inst: vpmovsxwd_a<R>) -> Self {
        Self::vpmovsxwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovsxwq: A(xmm1[w], xmm_m32) => VEX.128.66.0F38.WIG 0x24 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovsxwq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovsxwq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovsxwq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x24); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovsxwq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovsxwq_a<R>> for Inst<R> {
    fn from(inst: vpmovsxwq_a<R>) -> Self {
        Self::vpmovsxwq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovsxdq: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.WIG 0x25 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovsxdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovsxdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovsxdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x25); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovsxdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovsxdq_a<R>> for Inst<R> {
    fn from(inst: vpmovsxdq_a<R>) -> Self {
        Self::vpmovsxdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovzxbw: A(xmm1[w], xmm_m64) => 0x66 + 0x0F + 0x38 0x30 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovzxbw_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovzxbw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovzxbw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovzxbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x30); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovzxbw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovzxbw_a<R>> for Inst<R> {
    fn from(inst: pmovzxbw_a<R>) -> Self {
        Self::pmovzxbw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovzxbd: A(xmm1[w], xmm_m32) => 0x66 + 0x0F + 0x38 0x31 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovzxbd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovzxbd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovzxbd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovzxbd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovzxbd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovzxbd_a<R>> for Inst<R> {
    fn from(inst: pmovzxbd_a<R>) -> Self {
        Self::pmovzxbd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovzxbq: A(xmm1[w], xmm_m16) => 0x66 + 0x0F + 0x38 0x32 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovzxbq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovzxbq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m16: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovzxbq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m16: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m16: xmm_m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovzxbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m16) = &self.xmm_m16 {
            if let Some(trap_code) = xmm_m16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x32); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovzxbq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m16 = self.xmm_m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m16}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovzxbq_a<R>> for Inst<R> {
    fn from(inst: pmovzxbq_a<R>) -> Self {
        Self::pmovzxbq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovzxwd: A(xmm1[w], xmm_m64) => 0x66 + 0x0F + 0x38 0x33 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovzxwd_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovzxwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovzxwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovzxwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x33); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovzxwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovzxwd_a<R>> for Inst<R> {
    fn from(inst: pmovzxwd_a<R>) -> Self {
        Self::pmovzxwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovzxwq: A(xmm1[w], xmm_m32) => 0x66 + 0x0F + 0x38 0x34 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovzxwq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovzxwq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovzxwq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovzxwq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x34); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovzxwq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovzxwq_a<R>> for Inst<R> {
    fn from(inst: pmovzxwq_a<R>) -> Self {
        Self::pmovzxwq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmovzxdq: A(xmm1[w], xmm_m64) => 0x66 + 0x0F + 0x38 0x35 /r [((_64b | compat) & sse41)] (alternate: avx => vpmovzxdq_a)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmovzxdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmovzxdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmovzxdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x35); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmovzxdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmovzxdq_a<R>> for Inst<R> {
    fn from(inst: pmovzxdq_a<R>) -> Self {
        Self::pmovzxdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovzxbw: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.WIG 0x30 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovzxbw_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovzxbw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovzxbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x30); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovzxbw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovzxbw_a<R>> for Inst<R> {
    fn from(inst: vpmovzxbw_a<R>) -> Self {
        Self::vpmovzxbw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovzxbd: A(xmm1[w], xmm_m32) => VEX.128.66.0F38.WIG 0x31 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovzxbd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovzxbd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovzxbd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovzxbd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovzxbd_a<R>> for Inst<R> {
    fn from(inst: vpmovzxbd_a<R>) -> Self {
        Self::vpmovzxbd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovzxbq: A(xmm1[w], xmm_m16) => VEX.128.66.0F38.WIG 0x32 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovzxbq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m16: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovzxbq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m16: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m16: xmm_m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovzxbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m16) = &self.xmm_m16 {
            if let Some(trap_code) = xmm_m16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m16.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x32); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovzxbq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m16 = self.xmm_m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m16}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovzxbq_a<R>> for Inst<R> {
    fn from(inst: vpmovzxbq_a<R>) -> Self {
        Self::vpmovzxbq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovzxwd: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.WIG 0x33 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovzxwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovzxwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovzxwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x33); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovzxwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovzxwd_a<R>> for Inst<R> {
    fn from(inst: vpmovzxwd_a<R>) -> Self {
        Self::vpmovzxwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovzxwq: A(xmm1[w], xmm_m32) => VEX.128.66.0F38.WIG 0x34 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovzxwq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovzxwq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovzxwq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x34); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovzxwq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovzxwq_a<R>> for Inst<R> {
    fn from(inst: vpmovzxwq_a<R>) -> Self {
        Self::vpmovzxwq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmovzxdq: A(xmm1[w], xmm_m64) => VEX.128.66.0F38.WIG 0x35 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmovzxdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmovzxdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmovzxdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x35); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmovzxdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmovzxdq_a<R>> for Inst<R> {
    fn from(inst: vpmovzxdq_a<R>) -> Self {
        Self::vpmovzxdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulb: M(ax[rw,implicit], rm8) => 0xF6 /4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulb_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8} ;; implicit: {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulb_m<R>> for Inst<R> {
    fn from(inst: mulb_m<R>) -> Self {
        Self::mulb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulw: M(ax[rw,implicit], dx[w,implicit], rm16) => 0x66 + 0xF7 /4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulw_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub dx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, dx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            dx: dx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.dx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.dx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let dx = self.dx.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16} ;; implicit: {ax}, {dx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulw_m<R>> for Inst<R> {
    fn from(inst: mulw_m<R>) -> Self {
        Self::mulw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mull: M(eax[rw,implicit], edx[w,implicit], rm32) => 0xF7 /4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mull_m<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub edx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mull_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, edx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            edx: edx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mull") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.edx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.edx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mull_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let edx = self.edx.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32} ;; implicit: {eax}, {edx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mull_m<R>> for Inst<R> {
    fn from(inst: mull_m<R>) -> Self {
        Self::mull_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulq: M(rax[rw,implicit], rdx[w,implicit], rm64) => REX.W + 0xF7 /4 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulq_m<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rdx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64} ;; implicit: {rax}, {rdx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulq_m<R>> for Inst<R> {
    fn from(inst: mulq_m<R>) -> Self {
        Self::mulq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulb: M(ax[rw,implicit], rm8) => 0xF6 /5 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulb_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8} ;; implicit: {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulb_m<R>> for Inst<R> {
    fn from(inst: imulb_m<R>) -> Self {
        Self::imulb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulw: M(ax[rw,implicit], dx[w,implicit], rm16) => 0x66 + 0xF7 /5 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulw_m<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub dx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, dx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            dx: dx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.dx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.dx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let dx = self.dx.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16} ;; implicit: {ax}, {dx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulw_m<R>> for Inst<R> {
    fn from(inst: imulw_m<R>) -> Self {
        Self::imulw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imull: M(eax[rw,implicit], edx[w,implicit], rm32) => 0xF7 /5 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imull_m<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub edx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imull_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, edx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            edx: edx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imull") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.edx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.edx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imull_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let edx = self.edx.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32} ;; implicit: {eax}, {edx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imull_m<R>> for Inst<R> {
    fn from(inst: imull_m<R>) -> Self {
        Self::imull_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulq: M(rax[rw,implicit], rdx[w,implicit], rm64) => REX.W + 0xF7 /5 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulq_m<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::WriteGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, rdx: impl Into<Fixed<R::WriteGpr, { gpr::enc::RDX }>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let enc = self.rdx.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_write_gpr(&mut self.rdx.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64} ;; implicit: {rax}, {rdx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulq_m<R>> for Inst<R> {
    fn from(inst: imulq_m<R>) -> Self {
        Self::imulq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulw: RM(r16[rw], rm16) => 0x66 + 0x0F + 0xAF [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xaf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulw_rm<R>> for Inst<R> {
    fn from(inst: imulw_rm<R>) -> Self {
        Self::imulw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imull: RM(r32[rw], rm32) => 0x0F + 0xAF [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imull_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imull_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imull") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xaf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imull_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imull_rm<R>> for Inst<R> {
    fn from(inst: imull_rm<R>) -> Self {
        Self::imull_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulq: RM(r64[rw], rm64) => REX.W + 0x0F + 0xAF [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xaf); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulq_rm<R>> for Inst<R> {
    fn from(inst: imulq_rm<R>) -> Self {
        Self::imulq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulw: RMI_SXB(r16[w], rm16, imm8[sxw]) => 0x66 + 0x6B ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulw_rmi_sxb<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulw_rmi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x6b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulw_rmi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendWord); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulw_rmi_sxb<R>> for Inst<R> {
    fn from(inst: imulw_rmi_sxb<R>) -> Self {
        Self::imulw_rmi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imull: RMI_SXB(r32[w], rm32, imm8[sxl]) => 0x6B ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imull_rmi_sxb<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imull_rmi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imull") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x6b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imull_rmi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imull_rmi_sxb<R>> for Inst<R> {
    fn from(inst: imull_rmi_sxb<R>) -> Self {
        Self::imull_rmi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulq: RMI_SXB(r64[w], rm64, imm8[sxq]) => REX.W + 0x6B ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulq_rmi_sxb<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulq_rmi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x6b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulq_rmi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulq_rmi_sxb<R>> for Inst<R> {
    fn from(inst: imulq_rmi_sxb<R>) -> Self {
        Self::imulq_rmi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulw: RMI(r16[w], rm16, imm16) => 0x66 + 0x69 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulw_rmi<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulw_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x69); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulw_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulw_rmi<R>> for Inst<R> {
    fn from(inst: imulw_rmi<R>) -> Self {
        Self::imulw_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imull: RMI(r32[w], rm32, imm32) => 0x69 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imull_rmi<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imull_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imull") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x69); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imull_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imull_rmi<R>> for Inst<R> {
    fn from(inst: imull_rmi<R>) -> Self {
        Self::imull_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `imulq: RMI_SXL(r64[w], rm64, imm32[sxq]) => REX.W + 0x69 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct imulq_rmi_sxl<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> imulq_rmi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("imulq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x69); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for imulq_rmi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<imulq_rmi_sxl<R>> for Inst<R> {
    fn from(inst: imulq_rmi_sxl<R>) -> Self {
        Self::imulq_rmi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulxl: RVM(r32a[w], r32b[w], rm32, edx[implicit]) => VEX.LZ.F2.0F38.W0 0xF6 [((_64b | compat) & bmi2)] custom(Visit)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulxl_rvm<R> where R: Registers {
    pub r32a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32b: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub edx: Fixed<R::ReadGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulxl_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32a: impl Into<Gpr<R::WriteGpr>>, r32b: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, edx: impl Into<Fixed<R::ReadGpr, { gpr::enc::RDX }>>) -> Self {
        Self {
            r32a: r32a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32b: r32b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            edx: edx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulxl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r32b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        crate::custom::visit::mulxl_rvm(self, visitor) // cranelift/assembler-x64/meta/src/generate/inst.rs:187
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulxl_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32a = self.r32a.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32b = self.r32b.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let edx = self.edx.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32b}, {r32a} ;; implicit: {edx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulxl_rvm<R>> for Inst<R> {
    fn from(inst: mulxl_rvm<R>) -> Self {
        Self::mulxl_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulxq: RVM(r64a[w], r64b[w], rm64, rdx[implicit]) => VEX.LZ.F2.0F38.W1 0xF6 [(_64b & bmi2)] custom(Visit)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulxq_rvm<R> where R: Registers {
    pub r64a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64b: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rdx: Fixed<R::ReadGpr, { gpr::enc::RDX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulxq_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64a: impl Into<Gpr<R::WriteGpr>>, r64b: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, rdx: impl Into<Fixed<R::ReadGpr, { gpr::enc::RDX }>>) -> Self {
        Self {
            r64a: r64a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64b: r64b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rdx: rdx.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulxq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r64b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        crate::custom::visit::mulxq_rvm(self, visitor) // cranelift/assembler-x64/meta/src/generate/inst.rs:187
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulxq_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64a = self.r64a.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64b = self.r64b.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rdx = self.rdx.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64b}, {r64a} ;; implicit: {rdx}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulxq_rvm<R>> for Inst<R> {
    fn from(inst: mulxq_rvm<R>) -> Self {
        Self::mulxq_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x59 /r [((_64b | compat) & sse)] (alternate: avx => vmulss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulss_a<R>> for Inst<R> {
    fn from(inst: mulss_a<R>) -> Self {
        Self::mulss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x59 /r [((_64b | compat) & sse2)] (alternate: avx => vmulsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulsd_a<R>> for Inst<R> {
    fn from(inst: mulsd_a<R>) -> Self {
        Self::mulsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x59 /r [((_64b | compat) & sse)] (alternate: avx => vmulps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulps_a<R>> for Inst<R> {
    fn from(inst: mulps_a<R>) -> Self {
        Self::mulps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `mulpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x59 /r [((_64b | compat) & sse2)] (alternate: avx => vmulpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct mulpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> mulpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("mulpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for mulpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<mulpd_a<R>> for Inst<R> {
    fn from(inst: mulpd_a<R>) -> Self {
        Self::mulpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmuldq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x28 /r [((_64b | compat) & sse41)] (alternate: avx => vpmuldq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmuldq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmuldq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmuldq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmuldq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmuldq_a<R>> for Inst<R> {
    fn from(inst: pmuldq_a<R>) -> Self {
        Self::pmuldq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmulhrsw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x0B /r [((_64b | compat) & ssse3)] (alternate: avx => vpmulhrsw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmulhrsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmulhrsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmulhrsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmulhrsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmulhrsw_a<R>> for Inst<R> {
    fn from(inst: pmulhrsw_a<R>) -> Self {
        Self::pmulhrsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmulhuw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE4 /r [((_64b | compat) & sse2)] (alternate: avx => vpmulhuw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmulhuw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmulhuw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmulhuw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmulhuw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmulhuw_a<R>> for Inst<R> {
    fn from(inst: pmulhuw_a<R>) -> Self {
        Self::pmulhuw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmulhw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE5 /r [((_64b | compat) & sse2)] (alternate: avx => vpmulhw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmulhw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmulhw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmulhw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmulhw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmulhw_a<R>> for Inst<R> {
    fn from(inst: pmulhw_a<R>) -> Self {
        Self::pmulhw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmulld: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x40 /r [((_64b | compat) & sse41)] (alternate: avx => vpmulld_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmulld_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmulld_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmulld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmulld_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmulld_a<R>> for Inst<R> {
    fn from(inst: pmulld_a<R>) -> Self {
        Self::pmulld_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmullw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD5 /r [((_64b | compat) & sse2)] (alternate: avx => vpmullw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmullw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmullw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmullw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmullw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmullw_a<R>> for Inst<R> {
    fn from(inst: pmullw_a<R>) -> Self {
        Self::pmullw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmuludq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF4 /r [((_64b | compat) & sse2)] (alternate: avx => vpmuludq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmuludq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmuludq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmuludq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmuludq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmuludq_a<R>> for Inst<R> {
    fn from(inst: pmuludq_a<R>) -> Self {
        Self::pmuludq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmulss: B(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x59 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmulss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmulss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmulss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmulss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmulss_b<R>> for Inst<R> {
    fn from(inst: vmulss_b<R>) -> Self {
        Self::vmulss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmulsd: B(xmm1[w], xmm2, xmm_m64) => VEX.LIG.F2.0F.WIG 0x59 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmulsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmulsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmulsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmulsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmulsd_b<R>> for Inst<R> {
    fn from(inst: vmulsd_b<R>) -> Self {
        Self::vmulsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmulps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x59 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmulps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmulps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmulps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmulps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmulps_b<R>> for Inst<R> {
    fn from(inst: vmulps_b<R>) -> Self {
        Self::vmulps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vmulpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x59 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vmulpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vmulpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vmulpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x59); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vmulpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vmulpd_b<R>> for Inst<R> {
    fn from(inst: vmulpd_b<R>) -> Self {
        Self::vmulpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmuldq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x28 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmuldq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmuldq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmuldq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmuldq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmuldq_b<R>> for Inst<R> {
    fn from(inst: vpmuldq_b<R>) -> Self {
        Self::vpmuldq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmulhrsw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x0B [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmulhrsw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmulhrsw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmulhrsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmulhrsw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmulhrsw_b<R>> for Inst<R> {
    fn from(inst: vpmulhrsw_b<R>) -> Self {
        Self::vpmulhrsw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmulhuw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE4 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmulhuw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmulhuw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmulhuw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe4); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmulhuw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmulhuw_b<R>> for Inst<R> {
    fn from(inst: vpmulhuw_b<R>) -> Self {
        Self::vpmulhuw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmulhw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE5 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmulhw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmulhw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmulhw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe5); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmulhw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmulhw_b<R>> for Inst<R> {
    fn from(inst: vpmulhw_b<R>) -> Self {
        Self::vpmulhw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmulld: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x40 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmulld_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmulld_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmulld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmulld_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmulld_b<R>> for Inst<R> {
    fn from(inst: vpmulld_b<R>) -> Self {
        Self::vpmulld_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmullw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD5 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmullw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmullw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmullw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd5); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmullw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmullw_b<R>> for Inst<R> {
    fn from(inst: vpmullw_b<R>) -> Self {
        Self::vpmullw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmuludq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF4 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmuludq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmuludq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmuludq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf4); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmuludq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmuludq_b<R>> for Inst<R> {
    fn from(inst: vpmuludq_b<R>) -> Self {
        Self::vpmuludq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmulld: C(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F38.W0 0x40 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmulld_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmulld_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmulld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmulld_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmulld_c<R>> for Inst<R> {
    fn from(inst: vpmulld_c<R>) -> Self {
        Self::vpmulld_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmullq: C(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F38.W1 0x40 /r [(((_64b | compat) & avx512vl) & avx512dq)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmullq_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmullq_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmullq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x40); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512dq() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512dq); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmullq_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmullq_c<R>> for Inst<R> {
    fn from(inst: vpmullq_c<R>) -> Self {
        Self::vpmullq_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `negb: M(rm8[rw]) => 0xF6 /3 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct negb_m<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> negb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("negb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for negb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<negb_m<R>> for Inst<R> {
    fn from(inst: negb_m<R>) -> Self {
        Self::negb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `negw: M(rm16[rw]) => 0x66 + 0xF7 /3 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct negw_m<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> negw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("negw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for negw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<negw_m<R>> for Inst<R> {
    fn from(inst: negw_m<R>) -> Self {
        Self::negw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `negl: M(rm32[rw]) => 0xF7 /3 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct negl_m<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> negl_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("negl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for negl_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<negl_m<R>> for Inst<R> {
    fn from(inst: negl_m<R>) -> Self {
        Self::negl_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `negq: M(rm64[rw]) => REX.W + 0xF7 /3 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct negq_m<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> negq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("negq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for negq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<negq_m<R>> for Inst<R> {
    fn from(inst: negq_m<R>) -> Self {
        Self::negq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `notb: M(rm8[rw]) => 0xF6 /2 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct notb_m<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> notb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("notb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf6); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for notb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<notb_m<R>> for Inst<R> {
    fn from(inst: notb_m<R>) -> Self {
        Self::notb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `notw: M(rm16[rw]) => 0x66 + 0xF7 /2 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct notw_m<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> notw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("notw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for notw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<notw_m<R>> for Inst<R> {
    fn from(inst: notw_m<R>) -> Self {
        Self::notw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `notl: M(rm32[rw]) => 0xF7 /2 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct notl_m<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> notl_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("notl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for notl_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<notl_m<R>> for Inst<R> {
    fn from(inst: notl_m<R>) -> Self {
        Self::notl_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `notq: M(rm64[rw]) => REX.W + 0xF7 /2 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct notq_m<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> notq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("notq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for notq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<notq_m<R>> for Inst<R> {
    fn from(inst: notq_m<R>) -> Self {
        Self::notq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: ZO() => 0x90 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_zo  {
}
impl nop_zo {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x90); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_zo {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        f.write_str(&name) // cranelift/assembler-x64/meta/src/generate/inst.rs:280
    }
}
impl<R: Registers> From<nop_zo> for Inst<R> {
    fn from(inst: nop_zo) -> Self {
        Self::nop_zo(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nopl: M(rm32) => 0x0F + 0x1F /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct nopl_m<R> where R: Registers {
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> nopl_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nopl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x1f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for nopl_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<nopl_m<R>> for Inst<R> {
    fn from(inst: nopl_m<R>) -> Self {
        Self::nopl_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 1B() => 0x90 [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_1b  {
}
impl nop_1b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_1b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_1b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_1b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_1b> for Inst<R> {
    fn from(inst: nop_1b) -> Self {
        Self::nop_1b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 2B() => 0x66 + 0x90 [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_2b  {
}
impl nop_2b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_2b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_2b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_2b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_2b> for Inst<R> {
    fn from(inst: nop_2b) -> Self {
        Self::nop_2b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 3B() => 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_3b  {
}
impl nop_3b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_3b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_3b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_3b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_3b> for Inst<R> {
    fn from(inst: nop_3b) -> Self {
        Self::nop_3b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 4B() => 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_4b  {
}
impl nop_4b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_4b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_4b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_4b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_4b> for Inst<R> {
    fn from(inst: nop_4b) -> Self {
        Self::nop_4b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 5B() => 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_5b  {
}
impl nop_5b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_5b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_5b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_5b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_5b> for Inst<R> {
    fn from(inst: nop_5b) -> Self {
        Self::nop_5b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 6B() => 0x66 + 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_6b  {
}
impl nop_6b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_6b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_6b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_6b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_6b> for Inst<R> {
    fn from(inst: nop_6b) -> Self {
        Self::nop_6b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 7B() => 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_7b  {
}
impl nop_7b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_7b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_7b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_7b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_7b> for Inst<R> {
    fn from(inst: nop_7b) -> Self {
        Self::nop_7b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 8B() => 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_8b  {
}
impl nop_8b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_8b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_8b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_8b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_8b> for Inst<R> {
    fn from(inst: nop_8b) -> Self {
        Self::nop_8b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `nop: 9B() => 0x66 + 0x0F + 0x1F [(_64b | compat)] custom(Encode | Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct nop_9b  {
}
impl nop_9b {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new() -> Self {
        Self {
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("nop") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        crate::custom::encode::nop_9b(self, buf); // cranelift/assembler-x64/meta/src/generate/inst.rs:129
    }

    pub fn visit<R: Registers>(&mut self, _: &mut impl RegisterVisitor<R>) {
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for nop_9b {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::nop_9b(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<nop_9b> for Inst<R> {
    fn from(inst: nop_9b) -> Self {
        Self::nop_9b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orb: I(al[rw], imm8) => 0x0C ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orb_i<R>> for Inst<R> {
    fn from(inst: orb_i<R>) -> Self {
        Self::orb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orw: I(ax[rw], imm16) => 0x66 + 0x0D iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orw_i<R>> for Inst<R> {
    fn from(inst: orw_i<R>) -> Self {
        Self::orw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orl: I(eax[rw], imm32) => 0x0D id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orl_i<R>> for Inst<R> {
    fn from(inst: orl_i<R>) -> Self {
        Self::orl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x0D id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orq_i_sxl<R>> for Inst<R> {
    fn from(inst: orq_i_sxl<R>) -> Self {
        Self::orq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orb: MI(rm8[rw], imm8) => 0x80 /1 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orb_mi<R>> for Inst<R> {
    fn from(inst: orb_mi<R>) -> Self {
        Self::orb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orw: MI(rm16[rw], imm16) => 0x66 + 0x81 /1 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orw_mi<R>> for Inst<R> {
    fn from(inst: orw_mi<R>) -> Self {
        Self::orw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orl: MI(rm32[rw], imm32) => 0x81 /1 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orl_mi<R>> for Inst<R> {
    fn from(inst: orl_mi<R>) -> Self {
        Self::orl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /1 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orq_mi_sxl<R>> for Inst<R> {
    fn from(inst: orq_mi_sxl<R>) -> Self {
        Self::orq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /1 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orl_mi_sxb<R>> for Inst<R> {
    fn from(inst: orl_mi_sxb<R>) -> Self {
        Self::orl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /1 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orq_mi_sxb<R>> for Inst<R> {
    fn from(inst: orq_mi_sxb<R>) -> Self {
        Self::orq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orb: MR(rm8[rw], r8) => 0x08 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orb_mr<R>> for Inst<R> {
    fn from(inst: orb_mr<R>) -> Self {
        Self::orb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orw: MR(rm16[rw], r16) => 0x66 + 0x09 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orw_mr<R>> for Inst<R> {
    fn from(inst: orw_mr<R>) -> Self {
        Self::orw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orl: MR(rm32[rw], r32) => 0x09 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orl_mr<R>> for Inst<R> {
    fn from(inst: orl_mr<R>) -> Self {
        Self::orl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orq: MR(rm64[rw], r64) => REX.W + 0x09 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orq_mr<R>> for Inst<R> {
    fn from(inst: orq_mr<R>) -> Self {
        Self::orq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orb: RM(r8[rw], rm8) => 0x0A /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xa); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orb_rm<R>> for Inst<R> {
    fn from(inst: orb_rm<R>) -> Self {
        Self::orb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orw: RM(r16[rw], rm16) => 0x66 + 0x0B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orw_rm<R>> for Inst<R> {
    fn from(inst: orw_rm<R>) -> Self {
        Self::orw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orl: RM(r32[rw], rm32) => 0x0B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orl_rm<R>> for Inst<R> {
    fn from(inst: orl_rm<R>) -> Self {
        Self::orl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orq: RM(r64[rw], rm64) => REX.W + 0x0B /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orq_rm<R>> for Inst<R> {
    fn from(inst: orq_rm<R>) -> Self {
        Self::orq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orb: MI(m8[rw], imm8) => 0xF0 + 0x80 /1 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orb_mi<R>> for Inst<R> {
    fn from(inst: lock_orb_mi<R>) -> Self {
        Self::lock_orb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /1 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orw_mi<R>> for Inst<R> {
    fn from(inst: lock_orw_mi<R>) -> Self {
        Self::lock_orw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orl: MI(m32[rw], imm32) => 0xF0 + 0x81 /1 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orl_mi<R>> for Inst<R> {
    fn from(inst: lock_orl_mi<R>) -> Self {
        Self::lock_orl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /1 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_orq_mi_sxl<R>) -> Self {
        Self::lock_orq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /1 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_orl_mi_sxb<R>) -> Self {
        Self::lock_orl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /1 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_orq_mi_sxb<R>) -> Self {
        Self::lock_orq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orb: MR(m8[rw], r8) => 0xF0 + 0x08 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orb_mr<R>> for Inst<R> {
    fn from(inst: lock_orb_mr<R>) -> Self {
        Self::lock_orb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x09 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orw_mr<R>> for Inst<R> {
    fn from(inst: lock_orw_mr<R>) -> Self {
        Self::lock_orw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orl: MR(m32[rw], r32) => 0xF0 + 0x09 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orl_mr<R>> for Inst<R> {
    fn from(inst: lock_orl_mr<R>) -> Self {
        Self::lock_orl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_orq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x09 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_orq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_orq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_orq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_orq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_orq_mr<R>> for Inst<R> {
    fn from(inst: lock_orq_mr<R>) -> Self {
        Self::lock_orq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x56 /r [((_64b | compat) & sse)] (alternate: avx => vorps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x56); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orps_a<R>> for Inst<R> {
    fn from(inst: orps_a<R>) -> Self {
        Self::orps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `orpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x56 /r [((_64b | compat) & sse2)] (alternate: avx => vorpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct orpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> orpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("orpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x56); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for orpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<orpd_a<R>> for Inst<R> {
    fn from(inst: orpd_a<R>) -> Self {
        Self::orpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `por: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xEB /r [((_64b | compat) & sse2)] (alternate: avx => vpor_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct por_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> por_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("por") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xeb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for por_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<por_a<R>> for Inst<R> {
    fn from(inst: por_a<R>) -> Self {
        Self::por_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vorps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x56 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vorps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vorps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vorps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x56); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vorps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vorps_b<R>> for Inst<R> {
    fn from(inst: vorps_b<R>) -> Self {
        Self::vorps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vorpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x56 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vorpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vorpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vorpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x56); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vorpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vorpd_b<R>> for Inst<R> {
    fn from(inst: vorpd_b<R>) -> Self {
        Self::vorpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpor: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xEB /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpor_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpor_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpor") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xeb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpor_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpor_b<R>> for Inst<R> {
    fn from(inst: vpor_b<R>) -> Self {
        Self::vpor_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `packsswb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x63 [((_64b | compat) & sse2)] (alternate: avx => vpacksswb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct packsswb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> packsswb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("packsswb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x63); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for packsswb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<packsswb_a<R>> for Inst<R> {
    fn from(inst: packsswb_a<R>) -> Self {
        Self::packsswb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `packssdw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x6B [((_64b | compat) & sse2)] (alternate: avx => vpackssdw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct packssdw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> packssdw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("packssdw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for packssdw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<packssdw_a<R>> for Inst<R> {
    fn from(inst: packssdw_a<R>) -> Self {
        Self::packssdw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpacksswb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x63 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpacksswb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpacksswb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpacksswb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x63); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpacksswb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpacksswb_b<R>> for Inst<R> {
    fn from(inst: vpacksswb_b<R>) -> Self {
        Self::vpacksswb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpackssdw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x6B [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpackssdw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpackssdw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpackssdw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpackssdw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpackssdw_b<R>> for Inst<R> {
    fn from(inst: vpackssdw_b<R>) -> Self {
        Self::vpackssdw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `packuswb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x67 [((_64b | compat) & sse2)] (alternate: avx => vpackuswb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct packuswb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> packuswb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("packuswb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x67); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for packuswb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<packuswb_a<R>> for Inst<R> {
    fn from(inst: packuswb_a<R>) -> Self {
        Self::packuswb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `packusdw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x2B [((_64b | compat) & sse41)] (alternate: avx => vpackusdw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct packusdw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> packusdw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("packusdw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x2b); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for packusdw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<packusdw_a<R>> for Inst<R> {
    fn from(inst: packusdw_a<R>) -> Self {
        Self::packusdw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpackuswb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x67 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpackuswb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpackuswb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpackuswb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x67); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpackuswb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpackuswb_b<R>> for Inst<R> {
    fn from(inst: vpackuswb_b<R>) -> Self {
        Self::vpackuswb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpackusdw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x2B [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpackusdw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpackusdw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpackusdw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x2b); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpackusdw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpackusdw_b<R>> for Inst<R> {
    fn from(inst: vpackusdw_b<R>) -> Self {
        Self::vpackusdw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaddwd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF5 [((_64b | compat) & sse2)] (alternate: avx => vpmaddwd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaddwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaddwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaddwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaddwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaddwd_a<R>> for Inst<R> {
    fn from(inst: pmaddwd_a<R>) -> Self {
        Self::pmaddwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaddwd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF5 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaddwd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaddwd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaddwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf5); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaddwd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaddwd_b<R>> for Inst<R> {
    fn from(inst: vpmaddwd_b<R>) -> Self {
        Self::vpmaddwd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pmaddubsw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x38 0x04 [((_64b | compat) & ssse3)] (alternate: avx => vpmaddubsw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pmaddubsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pmaddubsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pmaddubsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x38); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x4); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.ssse3() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::ssse3); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pmaddubsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pmaddubsw_a<R>> for Inst<R> {
    fn from(inst: pmaddubsw_a<R>) -> Self {
        Self::pmaddubsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpmaddubsw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F38.WIG 0x04 [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpmaddubsw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpmaddubsw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpmaddubsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x4); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpmaddubsw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpmaddubsw_b<R>> for Inst<R> {
    fn from(inst: vpmaddubsw_b<R>) -> Self {
        Self::vpmaddubsw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rcpps: RM(xmm1[w], xmm_m128[align]) => 0x0F + 0x53 /r [((_64b | compat) & sse)] (alternate: avx => vrcpps_rm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rcpps_rm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rcpps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rcpps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x53); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rcpps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rcpps_rm<R>> for Inst<R> {
    fn from(inst: rcpps_rm<R>) -> Self {
        Self::rcpps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rcpss: RM(xmm1[w], xmm_m32) => 0xF3 + 0x0F + 0x53 /r [((_64b | compat) & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rcpss_rm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rcpss_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rcpss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x53); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rcpss_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rcpss_rm<R>> for Inst<R> {
    fn from(inst: rcpss_rm<R>) -> Self {
        Self::rcpss_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rsqrtps: RM(xmm1[w], xmm_m128[align]) => 0x0F + 0x52 /r [((_64b | compat) & sse)] (alternate: avx => vrsqrtps_rm)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rsqrtps_rm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rsqrtps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rsqrtps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x52); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rsqrtps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rsqrtps_rm<R>> for Inst<R> {
    fn from(inst: rsqrtps_rm<R>) -> Self {
        Self::rsqrtps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rsqrtss: RM(xmm1[w], xmm_m32) => 0xF3 + 0x0F + 0x52 /r [((_64b | compat) & sse)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rsqrtss_rm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rsqrtss_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rsqrtss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x52); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rsqrtss_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rsqrtss_rm<R>> for Inst<R> {
    fn from(inst: rsqrtss_rm<R>) -> Self {
        Self::rsqrtss_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vrcpps: RM(xmm1[w], xmm_m128) => VEX.128.0F.WIG 0x53 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vrcpps_rm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vrcpps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vrcpps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x53); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vrcpps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vrcpps_rm<R>> for Inst<R> {
    fn from(inst: vrcpps_rm<R>) -> Self {
        Self::vrcpps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vrcpss: RVM(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x53 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vrcpss_rvm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vrcpss_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vrcpss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x53); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vrcpss_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vrcpss_rvm<R>> for Inst<R> {
    fn from(inst: vrcpss_rvm<R>) -> Self {
        Self::vrcpss_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vrsqrtps: RM(xmm1[w], xmm_m128) => VEX.128.0F.WIG 0x52 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vrsqrtps_rm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vrsqrtps_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vrsqrtps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x52); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vrsqrtps_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vrsqrtps_rm<R>> for Inst<R> {
    fn from(inst: vrsqrtps_rm<R>) -> Self {
        Self::vrsqrtps_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vrsqrtss: RVM(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x52 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vrsqrtss_rvm<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vrsqrtss_rvm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vrsqrtss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x52); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vrsqrtss_rvm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vrsqrtss_rvm<R>> for Inst<R> {
    fn from(inst: vrsqrtss_rvm<R>) -> Self {
        Self::vrsqrtss_rvm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roundpd: RMI(xmm1[w], xmm_m128[align], imm8) => 0x66 + 0x0F + 0x3A 0x09 ib [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roundpd_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roundpd_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roundpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roundpd_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<roundpd_rmi<R>> for Inst<R> {
    fn from(inst: roundpd_rmi<R>) -> Self {
        Self::roundpd_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roundps: RMI(xmm1[w], xmm_m128[align], imm8) => 0x66 + 0x0F + 0x3A 0x08 ib [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roundps_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roundps_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roundps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0x8); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roundps_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<roundps_rmi<R>> for Inst<R> {
    fn from(inst: roundps_rmi<R>) -> Self {
        Self::roundps_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roundsd: RMI(xmm1[w], xmm_m64, imm8) => 0x66 + 0x0F + 0x3A 0x0B ib [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roundsd_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roundsd_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roundsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roundsd_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<roundsd_rmi<R>> for Inst<R> {
    fn from(inst: roundsd_rmi<R>) -> Self {
        Self::roundsd_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roundss: RMI(xmm1[w], xmm_m32, imm8) => 0x66 + 0x0F + 0x3A 0x0A ib [((_64b | compat) & sse41)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roundss_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roundss_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roundss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x3a); // cranelift/assembler-x64/meta/src/generate/format.rs:524
        buf.put1(0xa); // cranelift/assembler-x64/meta/src/generate/format.rs:527

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse41() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse41); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roundss_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<roundss_rmi<R>> for Inst<R> {
    fn from(inst: roundss_rmi<R>) -> Self {
        Self::roundss_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vroundpd: RMI(xmm1[w], xmm_m128, imm8) => VEX.128.66.0F3A.WIG 0x09 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vroundpd_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vroundpd_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vroundpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vroundpd_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vroundpd_rmi<R>> for Inst<R> {
    fn from(inst: vroundpd_rmi<R>) -> Self {
        Self::vroundpd_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vroundps: RMI(xmm1[w], xmm_m128, imm8) => VEX.128.66.0F3A.WIG 0x08 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vroundps_rmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vroundps_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vroundps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vroundps_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vroundps_rmi<R>> for Inst<R> {
    fn from(inst: vroundps_rmi<R>) -> Self {
        Self::vroundps_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vroundsd: RVMI(xmm1[w], xmm2, xmm_m64, imm8) => VEX.LIG.66.0F3A.WIG 0x0B ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vroundsd_rvmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vroundsd_rvmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vroundsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vroundsd_rvmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vroundsd_rvmi<R>> for Inst<R> {
    fn from(inst: vroundsd_rvmi<R>) -> Self {
        Self::vroundsd_rvmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vroundss: RVMI(xmm1[w], xmm2, xmm_m32, imm8) => VEX.LIG.66.0F3A.WIG 0x0A ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vroundss_rvmi<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vroundss_rvmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vroundss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xa); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vroundss_rvmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vroundss_rvmi<R>> for Inst<R> {
    fn from(inst: vroundss_rvmi<R>) -> Self {
        Self::vroundss_rvmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `seta: M(rm8[w])[flags:r] => 0x0F + 0x97 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct seta_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> seta_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("seta") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x97); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for seta_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<seta_m<R>> for Inst<R> {
    fn from(inst: seta_m<R>) -> Self {
        Self::seta_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setae: M(rm8[w])[flags:r] => 0x0F + 0x93 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setae_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setae_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setae") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x93); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setae_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setae_m<R>> for Inst<R> {
    fn from(inst: setae_m<R>) -> Self {
        Self::setae_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setb: M(rm8[w])[flags:r] => 0x0F + 0x92 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setb_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setb_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x92); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setb_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setb_m<R>> for Inst<R> {
    fn from(inst: setb_m<R>) -> Self {
        Self::setb_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setbe: M(rm8[w])[flags:r] => 0x0F + 0x96 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setbe_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setbe_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setbe") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x96); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setbe_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setbe_m<R>> for Inst<R> {
    fn from(inst: setbe_m<R>) -> Self {
        Self::setbe_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sete: M(rm8[w])[flags:r] => 0x0F + 0x94 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sete_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sete_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sete") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x94); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sete_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sete_m<R>> for Inst<R> {
    fn from(inst: sete_m<R>) -> Self {
        Self::sete_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setg: M(rm8[w])[flags:r] => 0x0F + 0x9F /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setg_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setg_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setg") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x9f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setg_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setg_m<R>> for Inst<R> {
    fn from(inst: setg_m<R>) -> Self {
        Self::setg_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setge: M(rm8[w])[flags:r] => 0x0F + 0x9D /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setge_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setge_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setge") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x9d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setge_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setge_m<R>> for Inst<R> {
    fn from(inst: setge_m<R>) -> Self {
        Self::setge_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setl: M(rm8[w])[flags:r] => 0x0F + 0x9C /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setl_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setl_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x9c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setl_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setl_m<R>> for Inst<R> {
    fn from(inst: setl_m<R>) -> Self {
        Self::setl_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setle: M(rm8[w])[flags:r] => 0x0F + 0x9E /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setle_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setle_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setle") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x9e); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setle_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setle_m<R>> for Inst<R> {
    fn from(inst: setle_m<R>) -> Self {
        Self::setle_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setne: M(rm8[w])[flags:r] => 0x0F + 0x95 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setne_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setne_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setne") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x95); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setne_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setne_m<R>> for Inst<R> {
    fn from(inst: setne_m<R>) -> Self {
        Self::setne_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setno: M(rm8[w])[flags:r] => 0x0F + 0x91 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setno_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setno_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setno") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x91); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setno_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setno_m<R>> for Inst<R> {
    fn from(inst: setno_m<R>) -> Self {
        Self::setno_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setnp: M(rm8[w])[flags:r] => 0x0F + 0x9B /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setnp_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setnp_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setnp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x9b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setnp_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setnp_m<R>> for Inst<R> {
    fn from(inst: setnp_m<R>) -> Self {
        Self::setnp_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setns: M(rm8[w])[flags:r] => 0x0F + 0x99 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setns_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setns_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setns") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x99); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setns_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setns_m<R>> for Inst<R> {
    fn from(inst: setns_m<R>) -> Self {
        Self::setns_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `seto: M(rm8[w])[flags:r] => 0x0F + 0x90 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct seto_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> seto_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("seto") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x90); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for seto_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<seto_m<R>> for Inst<R> {
    fn from(inst: seto_m<R>) -> Self {
        Self::seto_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `setp: M(rm8[w])[flags:r] => 0x0F + 0x9A /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct setp_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> setp_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("setp") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x9a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for setp_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<setp_m<R>> for Inst<R> {
    fn from(inst: setp_m<R>) -> Self {
        Self::setp_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sets: M(rm8[w])[flags:r] => 0x0F + 0x98 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sets_m<R> where R: Registers {
    pub rm8: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sets_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sets") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x98); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sets_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sets_m<R>> for Inst<R> {
    fn from(inst: sets_m<R>) -> Self {
        Self::sets_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarb: MC(rm8[rw], cl) => 0xD2 /7 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarb_mc<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarb_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarb_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarb_mc<R>> for Inst<R> {
    fn from(inst: sarb_mc<R>) -> Self {
        Self::sarb_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarb: MI(rm8[rw], imm8) => 0xC0 /7 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarb_mi<R>> for Inst<R> {
    fn from(inst: sarb_mi<R>) -> Self {
        Self::sarb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarb: M1(rm8[rw]) => 0xD0 /7 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarb_m1<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarb_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarb_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::sarb_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<sarb_m1<R>> for Inst<R> {
    fn from(inst: sarb_m1<R>) -> Self {
        Self::sarb_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarw: MC(rm16[rw], cl) => 0x66 + 0xD3 /7 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarw_mc<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarw_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarw_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarw_mc<R>> for Inst<R> {
    fn from(inst: sarw_mc<R>) -> Self {
        Self::sarw_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarw: MI(rm16[rw], imm8) => 0x66 + 0xC1 /7 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarw_mi<R>> for Inst<R> {
    fn from(inst: sarw_mi<R>) -> Self {
        Self::sarw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarw: M1(rm16[rw]) => 0x66 + 0xD1 /7 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarw_m1<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarw_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarw_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::sarw_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<sarw_m1<R>> for Inst<R> {
    fn from(inst: sarw_m1<R>) -> Self {
        Self::sarw_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarl: MC(rm32[rw], cl) => 0xD3 /7 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarl_mc<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarl_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarl_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarl_mc<R>> for Inst<R> {
    fn from(inst: sarl_mc<R>) -> Self {
        Self::sarl_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarl: MI(rm32[rw], imm8) => 0xC1 /7 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarl_mi<R>> for Inst<R> {
    fn from(inst: sarl_mi<R>) -> Self {
        Self::sarl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarl: M1(rm32[rw]) => 0xD1 /7 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarl_m1<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarl_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarl_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::sarl_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<sarl_m1<R>> for Inst<R> {
    fn from(inst: sarl_m1<R>) -> Self {
        Self::sarl_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarq: MC(rm64[rw], cl) => REX.W + 0xD3 /7 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarq_mc<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarq_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarq_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarq_mc<R>> for Inst<R> {
    fn from(inst: sarq_mc<R>) -> Self {
        Self::sarq_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarq: MI(rm64[rw], imm8) => REX.W + 0xC1 /7 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarq_mi<R>> for Inst<R> {
    fn from(inst: sarq_mi<R>) -> Self {
        Self::sarq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarq: M1(rm64[rw]) => REX.W + 0xD1 /7 ib [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarq_m1<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarq_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x7; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarq_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::sarq_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<sarq_m1<R>> for Inst<R> {
    fn from(inst: sarq_m1<R>) -> Self {
        Self::sarq_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlb: MC(rm8[rw], cl) => 0xD2 /4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlb_mc<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlb_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlb_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlb_mc<R>> for Inst<R> {
    fn from(inst: shlb_mc<R>) -> Self {
        Self::shlb_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlb: MI(rm8[rw], imm8) => 0xC0 /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlb_mi<R>> for Inst<R> {
    fn from(inst: shlb_mi<R>) -> Self {
        Self::shlb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlb: M1(rm8[rw]) => 0xD0 /4 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlb_m1<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlb_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlb_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shlb_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shlb_m1<R>> for Inst<R> {
    fn from(inst: shlb_m1<R>) -> Self {
        Self::shlb_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlw: MC(rm16[rw], cl) => 0x66 + 0xD3 /4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlw_mc<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlw_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlw_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlw_mc<R>> for Inst<R> {
    fn from(inst: shlw_mc<R>) -> Self {
        Self::shlw_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlw: MI(rm16[rw], imm8) => 0x66 + 0xC1 /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlw_mi<R>> for Inst<R> {
    fn from(inst: shlw_mi<R>) -> Self {
        Self::shlw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlw: M1(rm16[rw]) => 0x66 + 0xD1 /4 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlw_m1<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlw_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlw_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shlw_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shlw_m1<R>> for Inst<R> {
    fn from(inst: shlw_m1<R>) -> Self {
        Self::shlw_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shll: MC(rm32[rw], cl) => 0xD3 /4 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shll_mc<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shll_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shll_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shll_mc<R>> for Inst<R> {
    fn from(inst: shll_mc<R>) -> Self {
        Self::shll_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shll: MI(rm32[rw], imm8) => 0xC1 /4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shll_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shll_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shll_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shll_mi<R>> for Inst<R> {
    fn from(inst: shll_mi<R>) -> Self {
        Self::shll_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shll: M1(rm32[rw]) => 0xD1 /4 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shll_m1<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shll_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shll_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shll_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shll_m1<R>> for Inst<R> {
    fn from(inst: shll_m1<R>) -> Self {
        Self::shll_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlq: MC(rm64[rw], cl) => REX.W + 0xD3 /4 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlq_mc<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlq_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlq_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlq_mc<R>> for Inst<R> {
    fn from(inst: shlq_mc<R>) -> Self {
        Self::shlq_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlq: MI(rm64[rw], imm8) => REX.W + 0xC1 /4 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlq_mi<R>> for Inst<R> {
    fn from(inst: shlq_mi<R>) -> Self {
        Self::shlq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlq: M1(rm64[rw]) => REX.W + 0xD1 /4 ib [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlq_m1<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlq_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlq_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shlq_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shlq_m1<R>> for Inst<R> {
    fn from(inst: shlq_m1<R>) -> Self {
        Self::shlq_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrb: MC(rm8[rw], cl) => 0xD2 /5 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrb_mc<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrb_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrb_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrb_mc<R>> for Inst<R> {
    fn from(inst: shrb_mc<R>) -> Self {
        Self::shrb_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrb: MI(rm8[rw], imm8) => 0xC0 /5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrb_mi<R>> for Inst<R> {
    fn from(inst: shrb_mi<R>) -> Self {
        Self::shrb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrb: M1(rm8[rw]) => 0xD0 /5 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrb_m1<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrb_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrb_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shrb_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shrb_m1<R>> for Inst<R> {
    fn from(inst: shrb_m1<R>) -> Self {
        Self::shrb_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrw: MC(rm16[rw], cl) => 0x66 + 0xD3 /5 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrw_mc<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrw_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrw_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrw_mc<R>> for Inst<R> {
    fn from(inst: shrw_mc<R>) -> Self {
        Self::shrw_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrw: MI(rm16[rw], imm8) => 0x66 + 0xC1 /5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrw_mi<R>> for Inst<R> {
    fn from(inst: shrw_mi<R>) -> Self {
        Self::shrw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrw: M1(rm16[rw]) => 0x66 + 0xD1 /5 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrw_m1<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrw_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrw_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shrw_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shrw_m1<R>> for Inst<R> {
    fn from(inst: shrw_m1<R>) -> Self {
        Self::shrw_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrl: MC(rm32[rw], cl) => 0xD3 /5 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrl_mc<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrl_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrl_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrl_mc<R>> for Inst<R> {
    fn from(inst: shrl_mc<R>) -> Self {
        Self::shrl_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrl: MI(rm32[rw], imm8) => 0xC1 /5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrl_mi<R>> for Inst<R> {
    fn from(inst: shrl_mi<R>) -> Self {
        Self::shrl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrl: M1(rm32[rw]) => 0xD1 /5 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrl_m1<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrl_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrl_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shrl_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shrl_m1<R>> for Inst<R> {
    fn from(inst: shrl_m1<R>) -> Self {
        Self::shrl_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrq: MC(rm64[rw], cl) => REX.W + 0xD3 /5 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrq_mc<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrq_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrq_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrq_mc<R>> for Inst<R> {
    fn from(inst: shrq_mc<R>) -> Self {
        Self::shrq_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrq: MI(rm64[rw], imm8) => REX.W + 0xC1 /5 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrq_mi<R>> for Inst<R> {
    fn from(inst: shrq_mi<R>) -> Self {
        Self::shrq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrq: M1(rm64[rw]) => REX.W + 0xD1 /5 ib [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrq_m1<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrq_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrq_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::shrq_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<shrq_m1<R>> for Inst<R> {
    fn from(inst: shrq_m1<R>) -> Self {
        Self::shrq_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolb: MC(rm8[rw], cl) => 0xD2 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolb_mc<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolb_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolb_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rolb_mc<R>> for Inst<R> {
    fn from(inst: rolb_mc<R>) -> Self {
        Self::rolb_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolb: MI(rm8[rw], imm8) => 0xC0 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rolb_mi<R>> for Inst<R> {
    fn from(inst: rolb_mi<R>) -> Self {
        Self::rolb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolb: M1(rm8[rw]) => 0xD0 /0 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolb_m1<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolb_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolb_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rolb_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rolb_m1<R>> for Inst<R> {
    fn from(inst: rolb_m1<R>) -> Self {
        Self::rolb_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolw: MC(rm16[rw], cl) => 0x66 + 0xD3 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolw_mc<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolw_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolw_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rolw_mc<R>> for Inst<R> {
    fn from(inst: rolw_mc<R>) -> Self {
        Self::rolw_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolw: MI(rm16[rw], imm8) => 0x66 + 0xC1 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rolw_mi<R>> for Inst<R> {
    fn from(inst: rolw_mi<R>) -> Self {
        Self::rolw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolw: M1(rm16[rw]) => 0x66 + 0xD1 /0 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolw_m1<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolw_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolw_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rolw_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rolw_m1<R>> for Inst<R> {
    fn from(inst: rolw_m1<R>) -> Self {
        Self::rolw_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roll: MC(rm32[rw], cl) => 0xD3 /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roll_mc<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roll_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roll_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<roll_mc<R>> for Inst<R> {
    fn from(inst: roll_mc<R>) -> Self {
        Self::roll_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roll: MI(rm32[rw], imm8) => 0xC1 /0 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roll_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roll_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roll_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<roll_mi<R>> for Inst<R> {
    fn from(inst: roll_mi<R>) -> Self {
        Self::roll_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `roll: M1(rm32[rw]) => 0xD1 /0 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct roll_m1<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> roll_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("roll") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for roll_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::roll_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<roll_m1<R>> for Inst<R> {
    fn from(inst: roll_m1<R>) -> Self {
        Self::roll_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolq: MC(rm64[rw], cl) => REX.W + 0xD3 /0 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolq_mc<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolq_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolq_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rolq_mc<R>> for Inst<R> {
    fn from(inst: rolq_mc<R>) -> Self {
        Self::rolq_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolq: MI(rm64[rw], imm8) => REX.W + 0xC1 /0 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rolq_mi<R>> for Inst<R> {
    fn from(inst: rolq_mi<R>) -> Self {
        Self::rolq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rolq: M1(rm64[rw]) => REX.W + 0xD1 /0 ib [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rolq_m1<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rolq_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rolq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rolq_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rolq_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rolq_m1<R>> for Inst<R> {
    fn from(inst: rolq_m1<R>) -> Self {
        Self::rolq_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorb: MC(rm8[rw], cl) => 0xD2 /1 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorb_mc<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorb_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorb_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorb_mc<R>> for Inst<R> {
    fn from(inst: rorb_mc<R>) -> Self {
        Self::rorb_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorb: MI(rm8[rw], imm8) => 0xC0 /1 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorb_mi<R>> for Inst<R> {
    fn from(inst: rorb_mi<R>) -> Self {
        Self::rorb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorb: M1(rm8[rw]) => 0xD0 /1 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorb_m1<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorb_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd0); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorb_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rorb_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rorb_m1<R>> for Inst<R> {
    fn from(inst: rorb_m1<R>) -> Self {
        Self::rorb_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorw: MC(rm16[rw], cl) => 0x66 + 0xD3 /1 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorw_mc<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorw_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorw_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorw_mc<R>> for Inst<R> {
    fn from(inst: rorw_mc<R>) -> Self {
        Self::rorw_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorw: MI(rm16[rw], imm8) => 0x66 + 0xC1 /1 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorw_mi<R>> for Inst<R> {
    fn from(inst: rorw_mi<R>) -> Self {
        Self::rorw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorw: M1(rm16[rw]) => 0x66 + 0xD1 /1 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorw_m1<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorw_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorw_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rorw_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rorw_m1<R>> for Inst<R> {
    fn from(inst: rorw_m1<R>) -> Self {
        Self::rorw_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorl: MC(rm32[rw], cl) => 0xD3 /1 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorl_mc<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorl_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorl_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorl_mc<R>> for Inst<R> {
    fn from(inst: rorl_mc<R>) -> Self {
        Self::rorl_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorl: MI(rm32[rw], imm8) => 0xC1 /1 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorl_mi<R>> for Inst<R> {
    fn from(inst: rorl_mi<R>) -> Self {
        Self::rorl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorl: M1(rm32[rw]) => 0xD1 /1 ib [(_64b | compat)] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorl_m1<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorl_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorl_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rorl_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rorl_m1<R>> for Inst<R> {
    fn from(inst: rorl_m1<R>) -> Self {
        Self::rorl_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorq: MC(rm64[rw], cl) => REX.W + 0xD3 /1 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorq_mc<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorq_mc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorq_mc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorq_mc<R>> for Inst<R> {
    fn from(inst: rorq_mc<R>) -> Self {
        Self::rorq_mc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorq: MI(rm64[rw], imm8) => REX.W + 0xC1 /1 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorq_mi<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorq_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xc1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorq_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorq_mi<R>> for Inst<R> {
    fn from(inst: rorq_mi<R>) -> Self {
        Self::rorq_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorq: M1(rm64[rw]) => REX.W + 0xD1 /1 ib [_64b] custom(Display)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorq_m1<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorq_m1<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x1; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorq_m1<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        crate::custom::display::rorq_m1(f, self) // cranelift/assembler-x64/meta/src/generate/inst.rs:274
    }
}
impl<R: Registers> From<rorq_m1<R>> for Inst<R> {
    fn from(inst: rorq_m1<R>) -> Self {
        Self::rorq_m1(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shldw: MRI(rm16[rw], r16, imm8) => 0x66 + 0x0F + 0xA4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shldw_mri<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shldw_mri<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shldw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shldw_mri<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shldw_mri<R>> for Inst<R> {
    fn from(inst: shldw_mri<R>) -> Self {
        Self::shldw_mri(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shldw: MRC(rm16[rw], r16, cl) => 0x66 + 0x0F + 0xA5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shldw_mrc<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shldw_mrc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shldw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shldw_mrc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shldw_mrc<R>> for Inst<R> {
    fn from(inst: shldw_mrc<R>) -> Self {
        Self::shldw_mrc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shldl: MRI(rm32[rw], r32, imm8) => 0x0F + 0xA4 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shldl_mri<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shldl_mri<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shldl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shldl_mri<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shldl_mri<R>> for Inst<R> {
    fn from(inst: shldl_mri<R>) -> Self {
        Self::shldl_mri(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shldq: MRI(rm64[rw], r64, imm8) => REX.W + 0x0F + 0xA4 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shldq_mri<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shldq_mri<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shldq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa4); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shldq_mri<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shldq_mri<R>> for Inst<R> {
    fn from(inst: shldq_mri<R>) -> Self {
        Self::shldq_mri(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shldl: MRC(rm32[rw], r32, cl) => 0x0F + 0xA5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shldl_mrc<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shldl_mrc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shldl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shldl_mrc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shldl_mrc<R>> for Inst<R> {
    fn from(inst: shldl_mrc<R>) -> Self {
        Self::shldl_mrc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shldq: MRC(rm64[rw], r64, cl) => REX.W + 0x0F + 0xA5 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shldq_mrc<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub cl: Fixed<R::ReadGpr, { gpr::enc::RCX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shldq_mrc<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>, cl: impl Into<Fixed<R::ReadGpr, { gpr::enc::RCX }>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            cl: cl.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shldq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xa5); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let enc = self.cl.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_gpr(&mut self.cl.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shldq_mrc<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let cl = self.cl.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {cl}, {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shldq_mrc<R>> for Inst<R> {
    fn from(inst: shldq_mrc<R>) -> Self {
        Self::shldq_mrc(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarxl: RMV(r32a[w], rm32, r32b) => VEX.LZ.F3.0F38.W0 0xF7 [((_64b | compat) & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarxl_rmv<R> where R: Registers {
    pub r32a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarxl_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32a: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r32a: r32a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32b: r32b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarxl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r32b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarxl_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32a = self.r32a.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32b = self.r32b.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32b}, {rm32}, {r32a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarxl_rmv<R>> for Inst<R> {
    fn from(inst: sarxl_rmv<R>) -> Self {
        Self::sarxl_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlxl: RMV(r32a[w], rm32, r32b) => VEX.LZ.66.0F38.W0 0xF7 [((_64b | compat) & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlxl_rmv<R> where R: Registers {
    pub r32a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlxl_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32a: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r32a: r32a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32b: r32b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlxl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r32b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlxl_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32a = self.r32a.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32b = self.r32b.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32b}, {rm32}, {r32a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlxl_rmv<R>> for Inst<R> {
    fn from(inst: shlxl_rmv<R>) -> Self {
        Self::shlxl_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrxl: RMV(r32a[w], rm32, r32b) => VEX.LZ.F2.0F38.W0 0xF7 [((_64b | compat) & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrxl_rmv<R> where R: Registers {
    pub r32a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrxl_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32a: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r32b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r32a: r32a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32b: r32b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrxl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r32b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrxl_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32a = self.r32a.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32b = self.r32b.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32b}, {rm32}, {r32a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrxl_rmv<R>> for Inst<R> {
    fn from(inst: shrxl_rmv<R>) -> Self {
        Self::shrxl_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sarxq: RMV(r64a[w], rm64, r64b) => VEX.LZ.F3.0F38.W1 0xF7 [(_64b & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sarxq_rmv<R> where R: Registers {
    pub r64a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sarxq_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64a: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r64a: r64a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64b: r64b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sarxq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r64b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sarxq_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64a = self.r64a.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64b = self.r64b.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64b}, {rm64}, {r64a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sarxq_rmv<R>> for Inst<R> {
    fn from(inst: sarxq_rmv<R>) -> Self {
        Self::sarxq_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shlxq: RMV(r64a[w], rm64, r64b) => VEX.LZ.66.0F38.W1 0xF7 [(_64b & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shlxq_rmv<R> where R: Registers {
    pub r64a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shlxq_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64a: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r64a: r64a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64b: r64b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shlxq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r64b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shlxq_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64a = self.r64a.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64b = self.r64b.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64b}, {rm64}, {r64a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shlxq_rmv<R>> for Inst<R> {
    fn from(inst: shlxq_rmv<R>) -> Self {
        Self::shlxq_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `shrxq: RMV(r64a[w], rm64, r64b) => VEX.LZ.F2.0F38.W1 0xF7 [(_64b & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct shrxq_rmv<R> where R: Registers {
    pub r64a: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64b: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> shrxq_rmv<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64a: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, r64b: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r64a: r64a.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64b: r64b.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("shrxq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00010; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.r64b.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf7); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64a.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64a.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64b.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for shrxq_rmv<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64a = self.r64a.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64b = self.r64b.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64b}, {rm64}, {r64a}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<shrxq_rmv<R>> for Inst<R> {
    fn from(inst: shrxq_rmv<R>) -> Self {
        Self::shrxq_rmv(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorxl: RMI(r32[w], rm32, imm8) => VEX.LZ.F2.0F3A.W0 0xF0 /r ib [((_64b | compat) & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorxl_rmi<R> where R: Registers {
    pub r32: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorxl_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::WriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorxl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.rm32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf0); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorxl_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorxl_rmi<R>> for Inst<R> {
    fn from(inst: rorxl_rmi<R>) -> Self {
        Self::rorxl_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `rorxq: RMI(r64[w], rm64, imm8) => VEX.LZ.F2.0F3A.W1 0xF0 /r ib [(_64b & bmi2)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct rorxq_rmi<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> rorxq_rmi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("rorxq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00011; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.rm64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf0); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() && features.bmi2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::bmi2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for rorxq_rmi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<rorxq_rmi<R>> for Inst<R> {
    fn from(inst: rorxq_rmi<R>) -> Self {
        Self::rorxq_rmi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psllw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF1 /r [((_64b | compat) & sse2)] (alternate: avx => vpsllw_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psllw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psllw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psllw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psllw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psllw_a<R>> for Inst<R> {
    fn from(inst: psllw_a<R>) -> Self {
        Self::psllw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psllw: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x71 /6 ib [((_64b | compat) & sse2)] (alternate: avx => vpsllw_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psllw_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psllw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psllw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psllw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psllw_b<R>> for Inst<R> {
    fn from(inst: psllw_b<R>) -> Self {
        Self::psllw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pslld: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF2 /r [((_64b | compat) & sse2)] (alternate: avx => vpslld_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pslld_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pslld_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pslld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pslld_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pslld_a<R>> for Inst<R> {
    fn from(inst: pslld_a<R>) -> Self {
        Self::pslld_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pslld: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x72 /6 ib [((_64b | compat) & sse2)] (alternate: avx => vpslld_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pslld_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pslld_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pslld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pslld_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pslld_b<R>> for Inst<R> {
    fn from(inst: pslld_b<R>) -> Self {
        Self::pslld_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psllq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF3 /r [((_64b | compat) & sse2)] (alternate: avx => vpsllq_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psllq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psllq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psllq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psllq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psllq_a<R>> for Inst<R> {
    fn from(inst: psllq_a<R>) -> Self {
        Self::psllq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psllq: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x73 /6 ib [((_64b | compat) & sse2)] (alternate: avx => vpsllq_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psllq_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psllq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psllq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psllq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psllq_b<R>> for Inst<R> {
    fn from(inst: psllq_b<R>) -> Self {
        Self::psllq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsllw: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF1 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsllw_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsllw_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsllw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf1); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsllw_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsllw_c<R>> for Inst<R> {
    fn from(inst: vpsllw_c<R>) -> Self {
        Self::vpsllw_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsllw: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x71 /6 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsllw_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsllw_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsllw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsllw_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsllw_d<R>> for Inst<R> {
    fn from(inst: vpsllw_d<R>) -> Self {
        Self::vpsllw_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpslld: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF2 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpslld_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpslld_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpslld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpslld_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpslld_c<R>> for Inst<R> {
    fn from(inst: vpslld_c<R>) -> Self {
        Self::vpslld_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpslld: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x72 /6 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpslld_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpslld_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpslld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpslld_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpslld_d<R>> for Inst<R> {
    fn from(inst: vpslld_d<R>) -> Self {
        Self::vpslld_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsllq: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF3 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsllq_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsllq_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsllq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsllq_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsllq_c<R>> for Inst<R> {
    fn from(inst: vpsllq_c<R>) -> Self {
        Self::vpsllq_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsllq: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x73 /6 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsllq_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsllq_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsllq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsllq_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsllq_d<R>> for Inst<R> {
    fn from(inst: vpsllq_d<R>) -> Self {
        Self::vpsllq_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpslld: G(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W0 0xF2 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpslld_g<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpslld_g<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpslld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf2); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpslld_g<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpslld_g<R>> for Inst<R> {
    fn from(inst: vpslld_g<R>) -> Self {
        Self::vpslld_g(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpslld: F(xmm1[w], xmm_m128, imm8) => EVEX.128.66.0F.W0 0x72 /6 ib [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpslld_f<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpslld_f<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpslld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpslld_f<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpslld_f<R>> for Inst<R> {
    fn from(inst: vpslld_f<R>) -> Self {
        Self::vpslld_f(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsllq: G(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W1 0xF3 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsllq_g<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsllq_g<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsllq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf3); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsllq_g<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsllq_g<R>> for Inst<R> {
    fn from(inst: vpsllq_g<R>) -> Self {
        Self::vpsllq_g(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsllq: F(xmm1[w], xmm_m128, imm8) => EVEX.128.66.0F.W1 0x73 /6 ib [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsllq_f<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsllq_f<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsllq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsllq_f<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsllq_f<R>> for Inst<R> {
    fn from(inst: vpsllq_f<R>) -> Self {
        Self::vpsllq_f(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psraw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE1 /r [((_64b | compat) & sse2)] (alternate: avx => vpsraw_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psraw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psraw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psraw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psraw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psraw_a<R>> for Inst<R> {
    fn from(inst: psraw_a<R>) -> Self {
        Self::psraw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psraw: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x71 /4 ib [((_64b | compat) & sse2)] (alternate: avx => vpsraw_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psraw_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psraw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psraw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psraw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psraw_b<R>> for Inst<R> {
    fn from(inst: psraw_b<R>) -> Self {
        Self::psraw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrad: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE2 /r [((_64b | compat) & sse2)] (alternate: avx => vpsrad_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrad_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrad_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrad") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrad_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrad_a<R>> for Inst<R> {
    fn from(inst: psrad_a<R>) -> Self {
        Self::psrad_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrad: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x72 /4 ib [((_64b | compat) & sse2)] (alternate: avx => vpsrad_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrad_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrad_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrad") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrad_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrad_b<R>> for Inst<R> {
    fn from(inst: psrad_b<R>) -> Self {
        Self::psrad_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrlw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD1 /r [((_64b | compat) & sse2)] (alternate: avx => vpsrlw_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrlw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrlw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrlw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrlw_a<R>> for Inst<R> {
    fn from(inst: psrlw_a<R>) -> Self {
        Self::psrlw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrlw: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x71 /2 ib [((_64b | compat) & sse2)] (alternate: avx => vpsrlw_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrlw_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrlw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrlw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrlw_b<R>> for Inst<R> {
    fn from(inst: psrlw_b<R>) -> Self {
        Self::psrlw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrld: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD2 /r [((_64b | compat) & sse2)] (alternate: avx => vpsrld_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrld_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrld_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrld_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrld_a<R>> for Inst<R> {
    fn from(inst: psrld_a<R>) -> Self {
        Self::psrld_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrld: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x72 /2 ib [((_64b | compat) & sse2)] (alternate: avx => vpsrld_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrld_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrld_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrld_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrld_b<R>> for Inst<R> {
    fn from(inst: psrld_b<R>) -> Self {
        Self::psrld_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrlq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD3 /r [((_64b | compat) & sse2)] (alternate: avx => vpsrlq_c)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrlq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrlq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrlq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrlq_a<R>> for Inst<R> {
    fn from(inst: psrlq_a<R>) -> Self {
        Self::psrlq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psrlq: B(xmm1[rw], imm8) => 0x66 + 0x0F + 0x73 /2 ib [((_64b | compat) & sse2)] (alternate: avx => vpsrlq_d)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psrlq_b<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psrlq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psrlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:163
        let dst = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:164
        let rex = RexPrefix::two_op(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:165
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm1.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psrlq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psrlq_b<R>> for Inst<R> {
    fn from(inst: psrlq_b<R>) -> Self {
        Self::psrlq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsraw: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE1 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsraw_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsraw_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsraw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe1); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsraw_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsraw_c<R>> for Inst<R> {
    fn from(inst: vpsraw_c<R>) -> Self {
        Self::vpsraw_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsraw: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x71 /4 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsraw_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsraw_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsraw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsraw_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsraw_d<R>> for Inst<R> {
    fn from(inst: vpsraw_d<R>) -> Self {
        Self::vpsraw_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrad: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE2 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrad_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrad_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrad") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrad_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrad_c<R>> for Inst<R> {
    fn from(inst: vpsrad_c<R>) -> Self {
        Self::vpsrad_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrad: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x72 /4 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrad_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrad_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrad") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrad_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrad_d<R>> for Inst<R> {
    fn from(inst: vpsrad_d<R>) -> Self {
        Self::vpsrad_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrlw: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD1 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrlw_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrlw_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd1); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrlw_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrlw_c<R>> for Inst<R> {
    fn from(inst: vpsrlw_c<R>) -> Self {
        Self::vpsrlw_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrlw: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x71 /2 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrlw_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrlw_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrlw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x71); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrlw_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrlw_d<R>> for Inst<R> {
    fn from(inst: vpsrlw_d<R>) -> Self {
        Self::vpsrlw_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrld: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD2 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrld_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrld_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrld_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrld_c<R>> for Inst<R> {
    fn from(inst: vpsrld_c<R>) -> Self {
        Self::vpsrld_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrld: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x72 /2 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrld_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrld_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrld_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrld_d<R>> for Inst<R> {
    fn from(inst: vpsrld_d<R>) -> Self {
        Self::vpsrld_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrlq: C(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD3 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrlq_c<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrlq_c<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrlq_c<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrlq_c<R>> for Inst<R> {
    fn from(inst: vpsrlq_c<R>) -> Self {
        Self::vpsrlq_c(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrlq: D(xmm1[w], xmm2, imm8) => VEX.128.66.0F.WIG 0x73 /2 ib [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrlq_d<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrlq_d<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:397
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:398
        let rm = self.xmm2.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:399
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:400
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:482
        self.xmm2.encode_modrm(buf, reg); // cranelift/assembler-x64/meta/src/generate/format.rs:484

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrlq_d<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrlq_d<R>> for Inst<R> {
    fn from(inst: vpsrlq_d<R>) -> Self {
        Self::vpsrlq_d(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrad: G(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W0 0xE2 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrad_g<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrad_g<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrad") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe2); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrad_g<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrad_g<R>> for Inst<R> {
    fn from(inst: vpsrad_g<R>) -> Self {
        Self::vpsrad_g(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrad: F(xmm1[w], xmm_m128, imm8) => EVEX.128.66.0F.W0 0x72 /4 ib [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrad_f<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrad_f<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrad") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrad_f<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrad_f<R>> for Inst<R> {
    fn from(inst: vpsrad_f<R>) -> Self {
        Self::vpsrad_f(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsraq: G(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W1 0xE2 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsraq_g<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsraq_g<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsraq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe2); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsraq_g<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsraq_g<R>> for Inst<R> {
    fn from(inst: vpsraq_g<R>) -> Self {
        Self::vpsraq_g(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsraq: F(xmm1[w], xmm_m128, imm8) => EVEX.128.66.0F.W1 0x72 /4 ib [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsraq_f<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsraq_f<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsraq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = 0x4; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsraq_f<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsraq_f<R>> for Inst<R> {
    fn from(inst: vpsraq_f<R>) -> Self {
        Self::vpsraq_f(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrld: G(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W0 0xD2 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrld_g<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrld_g<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd2); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrld_g<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrld_g<R>> for Inst<R> {
    fn from(inst: vpsrld_g<R>) -> Self {
        Self::vpsrld_g(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrld: F(xmm1[w], xmm_m128, imm8) => EVEX.128.66.0F.W0 0x72 /2 ib [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrld_f<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrld_f<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrld") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x72); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrld_f<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrld_f<R>> for Inst<R> {
    fn from(inst: vpsrld_f<R>) -> Self {
        Self::vpsrld_f(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrlq: G(xmm1[w], xmm2, xmm_m128) => EVEX.128.66.0F.W1 0xD3 /r [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrlq_g<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrlq_g<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd3); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrlq_g<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrlq_g<R>> for Inst<R> {
    fn from(inst: vpsrlq_g<R>) -> Self {
        Self::vpsrlq_g(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsrlq: F(xmm1[w], xmm_m128, imm8) => EVEX.128.66.0F.W1 0x73 /2 ib [(((_64b | compat) & avx512vl) & avx512f)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsrlq_f<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsrlq_f<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsrlq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit EVEX prefix.
        let ll = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:241
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:242
        let mmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:243
        let w = true; // cranelift/assembler-x64/meta/src/generate/format.rs:244
        let bcast = false; // cranelift/assembler-x64/meta/src/generate/format.rs:248
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:366
        let vvvv = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:367
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:368
        let prefix = EvexPrefix::three_op(reg, vvvv, rm, ll, pp, mmm, w, bcast); // cranelift/assembler-x64/meta/src/generate/format.rs:369
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x73); // cranelift/assembler-x64/meta/src/generate/format.rs:546

        // Emit ModR/M byte.
        let reg = 0x2; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.xmm_m128.encode_rex_suffixes(buf, reg, 1, Some(16)); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        ((features._64b() || features.compat()) && features.avx512vl()) && features.avx512f() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F3: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F4: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Or(F3, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F5: &'static Features = &Features::Feature(Feature::avx512vl); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::And(F2, F5); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        const F6: &'static Features = &Features::Feature(Feature::avx512f); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F6); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        32 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsrlq_f<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsrlq_f<R>> for Inst<R> {
    fn from(inst: vpsrlq_f<R>) -> Self {
        Self::vpsrlq_f(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sqrtss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x51 /r [((_64b | compat) & sse)] (alternate: avx => vsqrtss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sqrtss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sqrtss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sqrtss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sqrtss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sqrtss_a<R>> for Inst<R> {
    fn from(inst: sqrtss_a<R>) -> Self {
        Self::sqrtss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sqrtsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x51 /r [((_64b | compat) & sse2)] (alternate: avx => vsqrtsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sqrtsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sqrtsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sqrtsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sqrtsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sqrtsd_a<R>> for Inst<R> {
    fn from(inst: sqrtsd_a<R>) -> Self {
        Self::sqrtsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sqrtps: A(xmm1[w], xmm_m128[align]) => 0x0F + 0x51 /r [((_64b | compat) & sse)] (alternate: avx => vsqrtps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sqrtps_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sqrtps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sqrtps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sqrtps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sqrtps_a<R>> for Inst<R> {
    fn from(inst: sqrtps_a<R>) -> Self {
        Self::sqrtps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sqrtpd: A(xmm1[w], xmm_m128[align]) => 0x66 + 0x0F + 0x51 /r [((_64b | compat) & sse2)] (alternate: avx => vsqrtpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sqrtpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sqrtpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sqrtpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sqrtpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sqrtpd_a<R>> for Inst<R> {
    fn from(inst: sqrtpd_a<R>) -> Self {
        Self::sqrtpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsqrtss: B(xmm1[w], xmm2, xmm_m32) => VEX.LIG.F3.0F.WIG 0x51 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsqrtss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsqrtss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsqrtss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsqrtss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsqrtss_b<R>> for Inst<R> {
    fn from(inst: vsqrtss_b<R>) -> Self {
        Self::vsqrtss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsqrtsd: B(xmm1[w], xmm2, xmm_m64) => VEX.LIG.F2.0F.WIG 0x51 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsqrtsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsqrtsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsqrtsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsqrtsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsqrtsd_b<R>> for Inst<R> {
    fn from(inst: vsqrtsd_b<R>) -> Self {
        Self::vsqrtsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsqrtps: B(xmm1[w], xmm_m128) => VEX.128.0F.WIG 0x51 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsqrtps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsqrtps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsqrtps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsqrtps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsqrtps_b<R>> for Inst<R> {
    fn from(inst: vsqrtps_b<R>) -> Self {
        Self::vsqrtps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsqrtpd: B(xmm1[w], xmm_m128) => VEX.128.66.0F.WIG 0x51 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsqrtpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsqrtpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsqrtpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:382
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:383
        let prefix = VexPrefix::two_op(reg, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:384
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x51); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsqrtpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsqrtpd_b<R>> for Inst<R> {
    fn from(inst: vsqrtpd_b<R>) -> Self {
        Self::vsqrtpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popw: M(rm16[w]) => 0x66 + 0x8F /0 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popw_m<R> where R: Registers {
    pub rm16: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popw_m<R>> for Inst<R> {
    fn from(inst: popw_m<R>) -> Self {
        Self::popw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popq: M(rm64[w]) => 0x8F /0 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popq_m<R> where R: Registers {
    pub rm64: GprMem<R::WriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::WriteGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x8f); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x0; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popq_m<R>> for Inst<R> {
    fn from(inst: popq_m<R>) -> Self {
        Self::popq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popw: O(r16[w]) => 0x66 + 0x58 +rw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popw_o<R> where R: Registers {
    pub r16: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popw_o<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::WriteGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:157
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:158
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r16.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0x58 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popw_o<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popw_o<R>> for Inst<R> {
    fn from(inst: popw_o<R>) -> Self {
        Self::popw_o(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `popq: O(r64[w]) => 0x58 +ro [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct popq_o<R> where R: Registers {
    pub r64: Gpr<R::WriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> popq_o<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::WriteGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("popq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:157
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:158
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r64.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0x58 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for popq_o<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<popq_o<R>> for Inst<R> {
    fn from(inst: popq_o<R>) -> Self {
        Self::popq_o(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushw: M(rm16) => 0x66 + 0xFF /6 [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pushw_m<R> where R: Registers {
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pushw_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xff); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pushw_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushw_m<R>> for Inst<R> {
    fn from(inst: pushw_m<R>) -> Self {
        Self::pushw_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushq: M(rm64) => 0xFF /6 [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pushq_m<R> where R: Registers {
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pushq_m<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0xff); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pushq_m<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushq_m<R>> for Inst<R> {
    fn from(inst: pushq_m<R>) -> Self {
        Self::pushq_m(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushw: O(r16) => 0x66 + 0x50 +rw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pushw_o<R> where R: Registers {
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pushw_o<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:157
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:158
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r16.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0x50 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pushw_o<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushw_o<R>> for Inst<R> {
    fn from(inst: pushw_o<R>) -> Self {
        Self::pushw_o(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushq: O(r64) => 0x50 +ro [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pushq_o<R> where R: Registers {
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pushq_o<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let dst = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:157
        let rex = RexPrefix::one_op(dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:158
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        let low_bits = self.r64.enc() & 0b111; // cranelift/assembler-x64/meta/src/generate/format.rs:521
        buf.put1(0x50 | low_bits); // cranelift/assembler-x64/meta/src/generate/format.rs:522

        // No need to emit a ModRM byte.
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pushq_o<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushq_o<R>> for Inst<R> {
    fn from(inst: pushq_o<R>) -> Self {
        Self::pushq_o(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushq: I8(imm8[sxq]) => 0x6A ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct pushq_i8  {
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl pushq_i8 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm8: impl Into<Simm8>) -> Self {
        Self {
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x6a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for pushq_i8 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushq_i8> for Inst<R> {
    fn from(inst: pushq_i8) -> Self {
        Self::pushq_i8(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushw: I16(imm16) => 0x66 + 0x68 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct pushw_i16  {
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl pushw_i16 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm16: impl Into<Imm16>) -> Self {
        Self {
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Emit opcode(s).
        buf.put1(0x68); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for pushw_i16 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushw_i16> for Inst<R> {
    fn from(inst: pushw_i16) -> Self {
        Self::pushw_i16(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pushq: I32(imm32[sxq]) => 0x68 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
pub struct pushq_i32  {
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl pushq_i32 {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(imm32: impl Into<Simm32>) -> Self {
        Self {
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pushq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit opcode(s).
        buf.put1(0x68); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit<R: Registers>(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl core::fmt::Display for pushq_i32 {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pushq_i32> for Inst<R> {
    fn from(inst: pushq_i32) -> Self {
        Self::pushq_i32(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subb: I(al[rw], imm8) => 0x2C ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subb_i<R>> for Inst<R> {
    fn from(inst: subb_i<R>) -> Self {
        Self::subb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subw: I(ax[rw], imm16) => 0x66 + 0x2D iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subw_i<R>> for Inst<R> {
    fn from(inst: subw_i<R>) -> Self {
        Self::subw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subl: I(eax[rw], imm32) => 0x2D id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subl_i<R>> for Inst<R> {
    fn from(inst: subl_i<R>) -> Self {
        Self::subl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x2D id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subq_i_sxl<R>> for Inst<R> {
    fn from(inst: subq_i_sxl<R>) -> Self {
        Self::subq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subb: MI(rm8[rw], imm8) => 0x80 /5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subb_mi<R>> for Inst<R> {
    fn from(inst: subb_mi<R>) -> Self {
        Self::subb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subw: MI(rm16[rw], imm16) => 0x66 + 0x81 /5 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subw_mi<R>> for Inst<R> {
    fn from(inst: subw_mi<R>) -> Self {
        Self::subw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subl: MI(rm32[rw], imm32) => 0x81 /5 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subl_mi<R>> for Inst<R> {
    fn from(inst: subl_mi<R>) -> Self {
        Self::subl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /5 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subq_mi_sxl<R>> for Inst<R> {
    fn from(inst: subq_mi_sxl<R>) -> Self {
        Self::subq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /5 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subl_mi_sxb<R>> for Inst<R> {
    fn from(inst: subl_mi_sxb<R>) -> Self {
        Self::subl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /5 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subq_mi_sxb<R>> for Inst<R> {
    fn from(inst: subq_mi_sxb<R>) -> Self {
        Self::subq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subb: MR(rm8[rw], r8) => 0x28 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subb_mr<R>> for Inst<R> {
    fn from(inst: subb_mr<R>) -> Self {
        Self::subb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subw: MR(rm16[rw], r16) => 0x66 + 0x29 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subw_mr<R>> for Inst<R> {
    fn from(inst: subw_mr<R>) -> Self {
        Self::subw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subl: MR(rm32[rw], r32) => 0x29 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subl_mr<R>> for Inst<R> {
    fn from(inst: subl_mr<R>) -> Self {
        Self::subl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subq: MR(rm64[rw], r64) => REX.W + 0x29 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subq_mr<R>> for Inst<R> {
    fn from(inst: subq_mr<R>) -> Self {
        Self::subq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subb: RM(r8[rw], rm8) => 0x2A /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subb_rm<R>> for Inst<R> {
    fn from(inst: subb_rm<R>) -> Self {
        Self::subb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subw: RM(r16[rw], rm16) => 0x66 + 0x2B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subw_rm<R>> for Inst<R> {
    fn from(inst: subw_rm<R>) -> Self {
        Self::subw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subl: RM(r32[rw], rm32) => 0x2B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subl_rm<R>> for Inst<R> {
    fn from(inst: subl_rm<R>) -> Self {
        Self::subl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subq: RM(r64[rw], rm64) => REX.W + 0x2B /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x2b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subq_rm<R>> for Inst<R> {
    fn from(inst: subq_rm<R>) -> Self {
        Self::subq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbb: I(al[rw], imm8) => 0x1C ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbb_i<R>> for Inst<R> {
    fn from(inst: sbbb_i<R>) -> Self {
        Self::sbbb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbw: I(ax[rw], imm16) => 0x66 + 0x1D iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbw_i<R>> for Inst<R> {
    fn from(inst: sbbw_i<R>) -> Self {
        Self::sbbw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbl: I(eax[rw], imm32) => 0x1D id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbl_i<R>> for Inst<R> {
    fn from(inst: sbbl_i<R>) -> Self {
        Self::sbbl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x1D id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbq_i_sxl<R>> for Inst<R> {
    fn from(inst: sbbq_i_sxl<R>) -> Self {
        Self::sbbq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbb: MI(rm8[rw], imm8) => 0x80 /3 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbb_mi<R>> for Inst<R> {
    fn from(inst: sbbb_mi<R>) -> Self {
        Self::sbbb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbw: MI(rm16[rw], imm16) => 0x66 + 0x81 /3 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbw_mi<R>> for Inst<R> {
    fn from(inst: sbbw_mi<R>) -> Self {
        Self::sbbw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbl: MI(rm32[rw], imm32) => 0x81 /3 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbl_mi<R>> for Inst<R> {
    fn from(inst: sbbl_mi<R>) -> Self {
        Self::sbbl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /3 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbq_mi_sxl<R>> for Inst<R> {
    fn from(inst: sbbq_mi_sxl<R>) -> Self {
        Self::sbbq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /3 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbl_mi_sxb<R>> for Inst<R> {
    fn from(inst: sbbl_mi_sxb<R>) -> Self {
        Self::sbbl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /3 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbq_mi_sxb<R>> for Inst<R> {
    fn from(inst: sbbq_mi_sxb<R>) -> Self {
        Self::sbbq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbb: MR(rm8[rw], r8) => 0x18 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x18); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbb_mr<R>> for Inst<R> {
    fn from(inst: sbbb_mr<R>) -> Self {
        Self::sbbb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbw: MR(rm16[rw], r16) => 0x66 + 0x19 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x19); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbw_mr<R>> for Inst<R> {
    fn from(inst: sbbw_mr<R>) -> Self {
        Self::sbbw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbl: MR(rm32[rw], r32) => 0x19 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x19); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbl_mr<R>> for Inst<R> {
    fn from(inst: sbbl_mr<R>) -> Self {
        Self::sbbl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbq: MR(rm64[rw], r64) => REX.W + 0x19 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x19); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbq_mr<R>> for Inst<R> {
    fn from(inst: sbbq_mr<R>) -> Self {
        Self::sbbq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbb: RM(r8[rw], rm8) => 0x1A /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbb_rm<R>> for Inst<R> {
    fn from(inst: sbbb_rm<R>) -> Self {
        Self::sbbb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbw: RM(r16[rw], rm16) => 0x66 + 0x1B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbw_rm<R>> for Inst<R> {
    fn from(inst: sbbw_rm<R>) -> Self {
        Self::sbbw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbl: RM(r32[rw], rm32) => 0x1B /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbl_rm<R>> for Inst<R> {
    fn from(inst: sbbl_rm<R>) -> Self {
        Self::sbbl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `sbbq: RM(r64[rw], rm64) => REX.W + 0x1B /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct sbbq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> sbbq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("sbbq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x1b); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for sbbq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<sbbq_rm<R>> for Inst<R> {
    fn from(inst: sbbq_rm<R>) -> Self {
        Self::sbbq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subb: MI(m8[rw], imm8) => 0xF0 + 0x80 /5 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subb_mi<R>> for Inst<R> {
    fn from(inst: lock_subb_mi<R>) -> Self {
        Self::lock_subb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /5 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subw_mi<R>> for Inst<R> {
    fn from(inst: lock_subw_mi<R>) -> Self {
        Self::lock_subw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subl: MI(m32[rw], imm32) => 0xF0 + 0x81 /5 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subl_mi<R>> for Inst<R> {
    fn from(inst: lock_subl_mi<R>) -> Self {
        Self::lock_subl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /5 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_subq_mi_sxl<R>) -> Self {
        Self::lock_subq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /5 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_subl_mi_sxb<R>) -> Self {
        Self::lock_subl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /5 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x5; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_subq_mi_sxb<R>) -> Self {
        Self::lock_subq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subb: MR(m8[rw], r8) => 0xF0 + 0x28 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x28); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subb_mr<R>> for Inst<R> {
    fn from(inst: lock_subb_mr<R>) -> Self {
        Self::lock_subb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x29 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subw_mr<R>> for Inst<R> {
    fn from(inst: lock_subw_mr<R>) -> Self {
        Self::lock_subw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subl: MR(m32[rw], r32) => 0xF0 + 0x29 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subl_mr<R>> for Inst<R> {
    fn from(inst: lock_subl_mr<R>) -> Self {
        Self::lock_subl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_subq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x29 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_subq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_subq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_subq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x29); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_subq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_subq_mr<R>> for Inst<R> {
    fn from(inst: lock_subq_mr<R>) -> Self {
        Self::lock_subq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbb: MI(m8[rw], imm8) => 0xF0 + 0x80 /3 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbb_mi<R>> for Inst<R> {
    fn from(inst: lock_sbbb_mi<R>) -> Self {
        Self::lock_sbbb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /3 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbw_mi<R>> for Inst<R> {
    fn from(inst: lock_sbbw_mi<R>) -> Self {
        Self::lock_sbbw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbl: MI(m32[rw], imm32) => 0xF0 + 0x81 /3 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbl_mi<R>> for Inst<R> {
    fn from(inst: lock_sbbl_mi<R>) -> Self {
        Self::lock_sbbl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /3 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_sbbq_mi_sxl<R>) -> Self {
        Self::lock_sbbq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /3 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_sbbl_mi_sxb<R>) -> Self {
        Self::lock_sbbl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /3 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x3; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_sbbq_mi_sxb<R>) -> Self {
        Self::lock_sbbq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbb: MR(m8[rw], r8) => 0xF0 + 0x18 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x18); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbb_mr<R>> for Inst<R> {
    fn from(inst: lock_sbbb_mr<R>) -> Self {
        Self::lock_sbbb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x19 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x19); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbw_mr<R>> for Inst<R> {
    fn from(inst: lock_sbbw_mr<R>) -> Self {
        Self::lock_sbbw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbl: MR(m32[rw], r32) => 0xF0 + 0x19 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x19); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbl_mr<R>> for Inst<R> {
    fn from(inst: lock_sbbl_mr<R>) -> Self {
        Self::lock_sbbl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_sbbq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x19 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_sbbq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_sbbq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_sbbq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x19); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_sbbq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_sbbq_mr<R>> for Inst<R> {
    fn from(inst: lock_sbbq_mr<R>) -> Self {
        Self::lock_sbbq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subss: A(xmm1[rw], xmm_m32) => 0xF3 + 0x0F + 0x5C /r [((_64b | compat) & sse)] (alternate: avx => vsubss_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subss_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subss_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF3); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subss_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subss_a<R>> for Inst<R> {
    fn from(inst: subss_a<R>) -> Self {
        Self::subss_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subsd: A(xmm1[rw], xmm_m64) => 0xF2 + 0x0F + 0x5C /r [((_64b | compat) & sse2)] (alternate: avx => vsubsd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subsd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subsd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0xF2); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subsd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subsd_a<R>> for Inst<R> {
    fn from(inst: subsd_a<R>) -> Self {
        Self::subsd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x5C /r [((_64b | compat) & sse)] (alternate: avx => vsubps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subps_a<R>> for Inst<R> {
    fn from(inst: subps_a<R>) -> Self {
        Self::subps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `subpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x5C /r [((_64b | compat) & sse2)] (alternate: avx => vsubpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct subpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> subpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("subpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for subpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<subpd_a<R>> for Inst<R> {
    fn from(inst: subpd_a<R>) -> Self {
        Self::subpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF8 /r [((_64b | compat) & sse2)] (alternate: avx => vpsubb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubb_a<R>> for Inst<R> {
    fn from(inst: psubb_a<R>) -> Self {
        Self::psubb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xF9 /r [((_64b | compat) & sse2)] (alternate: avx => vpsubw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xf9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubw_a<R>> for Inst<R> {
    fn from(inst: psubw_a<R>) -> Self {
        Self::psubw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xFA /r [((_64b | compat) & sse2)] (alternate: avx => vpsubd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xfa); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubd_a<R>> for Inst<R> {
    fn from(inst: psubd_a<R>) -> Self {
        Self::psubd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xFB /r [((_64b | compat) & sse2)] (alternate: avx => vpsubq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xfb); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubq_a<R>> for Inst<R> {
    fn from(inst: psubq_a<R>) -> Self {
        Self::psubq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubsb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE8 /r [((_64b | compat) & sse2)] (alternate: avx => vpsubsb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubsb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubsb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubsb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubsb_a<R>> for Inst<R> {
    fn from(inst: psubsb_a<R>) -> Self {
        Self::psubsb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubsw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xE9 /r [((_64b | compat) & sse2)] (alternate: avx => vpsubsw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubsw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubsw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xe9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubsw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubsw_a<R>> for Inst<R> {
    fn from(inst: psubsw_a<R>) -> Self {
        Self::psubsw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubusb: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD8 /r [((_64b | compat) & sse2)] (alternate: avx => vpsubusb_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubusb_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubusb_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubusb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd8); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubusb_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubusb_a<R>> for Inst<R> {
    fn from(inst: psubusb_a<R>) -> Self {
        Self::psubusb_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `psubusw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xD9 /r [((_64b | compat) & sse2)] (alternate: avx => vpsubusw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct psubusw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> psubusw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("psubusw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xd9); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for psubusw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<psubusw_a<R>> for Inst<R> {
    fn from(inst: psubusw_a<R>) -> Self {
        Self::psubusw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsubss: B(xmm1[w], xmm2, xmm_m32) => VEX.128.F3.0F.WIG 0x5C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsubss_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m32: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsubss_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m32: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m32: xmm_m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsubss") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m32) = &self.xmm_m32 {
            if let Some(trap_code) = xmm_m32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b10; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m32.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsubss_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m32 = self.xmm_m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m32}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsubss_b<R>> for Inst<R> {
    fn from(inst: vsubss_b<R>) -> Self {
        Self::vsubss_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsubsd: B(xmm1[w], xmm2, xmm_m64) => VEX.128.F2.0F.WIG 0x5C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsubsd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m64: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsubsd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m64: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m64: xmm_m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsubsd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m64) = &self.xmm_m64 {
            if let Some(trap_code) = xmm_m64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b11; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m64.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsubsd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m64 = self.xmm_m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m64}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsubsd_b<R>> for Inst<R> {
    fn from(inst: vsubsd_b<R>) -> Self {
        Self::vsubsd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsubps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x5C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsubps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsubps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsubps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsubps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsubps_b<R>> for Inst<R> {
    fn from(inst: vsubps_b<R>) -> Self {
        Self::vsubps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vsubpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x5C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vsubpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vsubpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vsubpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x5c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vsubpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vsubpd_b<R>> for Inst<R> {
    fn from(inst: vsubpd_b<R>) -> Self {
        Self::vsubpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF8 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubb_b<R>> for Inst<R> {
    fn from(inst: vpsubb_b<R>) -> Self {
        Self::vpsubb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xF9 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xf9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubw_b<R>> for Inst<R> {
    fn from(inst: vpsubw_b<R>) -> Self {
        Self::vpsubw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xFA /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xfa); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubd_b<R>> for Inst<R> {
    fn from(inst: vpsubd_b<R>) -> Self {
        Self::vpsubd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xFB /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xfb); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubq_b<R>> for Inst<R> {
    fn from(inst: vpsubq_b<R>) -> Self {
        Self::vpsubq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubsb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE8 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubsb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubsb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubsb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubsb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubsb_b<R>> for Inst<R> {
    fn from(inst: vpsubsb_b<R>) -> Self {
        Self::vpsubsb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubsw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xE9 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubsw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubsw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubsw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xe9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubsw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubsw_b<R>> for Inst<R> {
    fn from(inst: vpsubsw_b<R>) -> Self {
        Self::vpsubsw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubusb: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD8 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubusb_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubusb_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubusb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd8); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubusb_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubusb_b<R>> for Inst<R> {
    fn from(inst: vpsubusb_b<R>) -> Self {
        Self::vpsubusb_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpsubusw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xD9 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpsubusw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpsubusw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpsubusw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xd9); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpsubusw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpsubusw_b<R>> for Inst<R> {
    fn from(inst: vpsubusw_b<R>) -> Self {
        Self::vpsubusw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `unpcklps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x14 /r [((_64b | compat) & sse)] (alternate: avx => vunpcklps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct unpcklps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> unpcklps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("unpcklps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for unpcklps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<unpcklps_a<R>> for Inst<R> {
    fn from(inst: unpcklps_a<R>) -> Self {
        Self::unpcklps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `unpcklpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x14 /r [((_64b | compat) & sse2)] (alternate: avx => vunpcklpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct unpcklpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> unpcklpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("unpcklpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for unpcklpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<unpcklpd_a<R>> for Inst<R> {
    fn from(inst: unpcklpd_a<R>) -> Self {
        Self::unpcklpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `unpckhps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x15 /r [((_64b | compat) & sse)] (alternate: avx => vunpckhps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct unpckhps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> unpckhps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("unpckhps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for unpckhps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<unpckhps_a<R>> for Inst<R> {
    fn from(inst: unpckhps_a<R>) -> Self {
        Self::unpckhps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vunpcklps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x14 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vunpcklps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vunpcklps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vunpcklps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vunpcklps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vunpcklps_b<R>> for Inst<R> {
    fn from(inst: vunpcklps_b<R>) -> Self {
        Self::vunpcklps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vunpcklpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x14 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vunpcklpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vunpcklpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vunpcklpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x14); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vunpcklpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vunpcklpd_b<R>> for Inst<R> {
    fn from(inst: vunpcklpd_b<R>) -> Self {
        Self::vunpcklpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vunpckhps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x15 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vunpckhps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vunpckhps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vunpckhps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x15); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vunpckhps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vunpckhps_b<R>> for Inst<R> {
    fn from(inst: vunpckhps_b<R>) -> Self {
        Self::vunpckhps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpckhbw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x68 /r [((_64b | compat) & sse2)] (alternate: avx => vpunpckhbw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpckhbw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpckhbw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpckhbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x68); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpckhbw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpckhbw_a<R>> for Inst<R> {
    fn from(inst: punpckhbw_a<R>) -> Self {
        Self::punpckhbw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpckhwd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x69 /r [((_64b | compat) & sse2)] (alternate: avx => vpunpckhwd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpckhwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpckhwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpckhwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x69); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpckhwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpckhwd_a<R>> for Inst<R> {
    fn from(inst: punpckhwd_a<R>) -> Self {
        Self::punpckhwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpckhdq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x6A /r [((_64b | compat) & sse2)] (alternate: avx => vpunpckhdq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpckhdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpckhdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpckhdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6a); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpckhdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpckhdq_a<R>> for Inst<R> {
    fn from(inst: punpckhdq_a<R>) -> Self {
        Self::punpckhdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpckhqdq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x6D /r [((_64b | compat) & sse2)] (alternate: avx => vpunpckhqdq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpckhqdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpckhqdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpckhqdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6d); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpckhqdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpckhqdq_a<R>> for Inst<R> {
    fn from(inst: punpckhqdq_a<R>) -> Self {
        Self::punpckhqdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpcklwd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x61 /r [((_64b | compat) & sse2)] (alternate: avx => vpunpcklwd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpcklwd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpcklwd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpcklwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x61); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpcklwd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpcklwd_a<R>> for Inst<R> {
    fn from(inst: punpcklwd_a<R>) -> Self {
        Self::punpcklwd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpcklbw: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x60 /r [((_64b | compat) & sse2)] (alternate: avx => vpunpcklbw_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpcklbw_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpcklbw_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpcklbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x60); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpcklbw_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpcklbw_a<R>> for Inst<R> {
    fn from(inst: punpcklbw_a<R>) -> Self {
        Self::punpcklbw_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpckldq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x62 /r [((_64b | compat) & sse2)] (alternate: avx => vpunpckldq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpckldq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpckldq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpckldq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x62); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpckldq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpckldq_a<R>> for Inst<R> {
    fn from(inst: punpckldq_a<R>) -> Self {
        Self::punpckldq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `punpcklqdq: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x6C /r [((_64b | compat) & sse2)] (alternate: avx => vpunpcklqdq_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct punpcklqdq_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> punpcklqdq_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("punpcklqdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x6c); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for punpcklqdq_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<punpcklqdq_a<R>> for Inst<R> {
    fn from(inst: punpcklqdq_a<R>) -> Self {
        Self::punpcklqdq_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpckhbw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x68 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpckhbw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpckhbw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpckhbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x68); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpckhbw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpckhbw_b<R>> for Inst<R> {
    fn from(inst: vpunpckhbw_b<R>) -> Self {
        Self::vpunpckhbw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpckhwd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x69 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpckhwd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpckhwd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpckhwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x69); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpckhwd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpckhwd_b<R>> for Inst<R> {
    fn from(inst: vpunpckhwd_b<R>) -> Self {
        Self::vpunpckhwd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpckhdq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x6A /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpckhdq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpckhdq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpckhdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6a); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpckhdq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpckhdq_b<R>> for Inst<R> {
    fn from(inst: vpunpckhdq_b<R>) -> Self {
        Self::vpunpckhdq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpckhqdq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x6D /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpckhqdq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpckhqdq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpckhqdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6d); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpckhqdq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpckhqdq_b<R>> for Inst<R> {
    fn from(inst: vpunpckhqdq_b<R>) -> Self {
        Self::vpunpckhqdq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpcklwd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x61 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpcklwd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpcklwd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpcklwd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x61); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpcklwd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpcklwd_b<R>> for Inst<R> {
    fn from(inst: vpunpcklwd_b<R>) -> Self {
        Self::vpunpcklwd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpcklbw: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x60 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpcklbw_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpcklbw_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpcklbw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x60); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpcklbw_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpcklbw_b<R>> for Inst<R> {
    fn from(inst: vpunpcklbw_b<R>) -> Self {
        Self::vpunpcklbw_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpckldq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x62 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpckldq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpckldq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpckldq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x62); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpckldq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpckldq_b<R>> for Inst<R> {
    fn from(inst: vpunpckldq_b<R>) -> Self {
        Self::vpunpckldq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpunpcklqdq: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x6C /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpunpcklqdq_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpunpcklqdq_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpunpcklqdq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x6c); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpunpcklqdq_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpunpcklqdq_b<R>> for Inst<R> {
    fn from(inst: vpunpcklqdq_b<R>) -> Self {
        Self::vpunpcklqdq_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorb: I(al[rw], imm8) => 0x34 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorb_i<R> where R: Registers {
    pub al: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorb_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(al: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            al: al.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.al.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x34); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.al.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.al.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorb_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let al = self.al.to_string(Some(Size::Byte)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {al}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorb_i<R>> for Inst<R> {
    fn from(inst: xorb_i<R>) -> Self {
        Self::xorb_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorw: I(ax[rw], imm16) => 0x66 + 0x35 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorw_i<R> where R: Registers {
    pub ax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorw_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(ax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            ax: ax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.ax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x35); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.ax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.ax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorw_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let ax = self.ax.to_string(Some(Size::Word)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {ax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorw_i<R>> for Inst<R> {
    fn from(inst: xorw_i<R>) -> Self {
        Self::xorw_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorl: I(eax[rw], imm32) => 0x35 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorl_i<R> where R: Registers {
    pub eax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorl_i<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(eax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            eax: eax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.eax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x35); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.eax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.eax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorl_i<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let eax = self.eax.to_string(Some(Size::Doubleword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {eax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorl_i<R>> for Inst<R> {
    fn from(inst: xorl_i<R>) -> Self {
        Self::xorl_i(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorq: I_SXL(rax[rw], imm32[sxq]) => REX.W + 0x35 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorq_i_sxl<R> where R: Registers {
    pub rax: Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorq_i_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rax: impl Into<Fixed<R::ReadWriteGpr, { gpr::enc::RAX }>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rax: rax.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0; // cranelift/assembler-x64/meta/src/generate/format.rs:149
        let dst = self.rax.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:150
        let rex = RexPrefix::with_digit(digit, dst, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:151
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x35); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // No need to emit a ModRM byte.

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        let enc = self.rax.expected_enc(); // cranelift/assembler-x64/meta/src/generate/inst.rs:204
        visitor.fixed_read_write_gpr(&mut self.rax.0, enc); // cranelift/assembler-x64/meta/src/generate/inst.rs:205
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorq_i_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rax = self.rax.to_string(Some(Size::Quadword)); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rax}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorq_i_sxl<R>> for Inst<R> {
    fn from(inst: xorq_i_sxl<R>) -> Self {
        Self::xorq_i_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorb: MI(rm8[rw], imm8) => 0x80 /6 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorb_mi<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorb_mi<R>> for Inst<R> {
    fn from(inst: xorb_mi<R>) -> Self {
        Self::xorb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorw: MI(rm16[rw], imm16) => 0x66 + 0x81 /6 iw [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorw_mi<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorw_mi<R>> for Inst<R> {
    fn from(inst: xorw_mi<R>) -> Self {
        Self::xorw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorl: MI(rm32[rw], imm32) => 0x81 /6 id [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorl_mi<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorl_mi<R>> for Inst<R> {
    fn from(inst: xorl_mi<R>) -> Self {
        Self::xorl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorq: MI_SXL(rm64[rw], imm32[sxq]) => REX.W + 0x81 /6 id [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorq_mi_sxl<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorq_mi_sxl<R>> for Inst<R> {
    fn from(inst: xorq_mi_sxl<R>) -> Self {
        Self::xorq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorl: MI_SXB(rm32[rw], imm8[sxl]) => 0x83 /6 ib [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorl_mi_sxb<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorl_mi_sxb<R>> for Inst<R> {
    fn from(inst: xorl_mi_sxb<R>) -> Self {
        Self::xorl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorq: MI_SXB(rm64[rw], imm8[sxq]) => REX.W + 0x83 /6 ib [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorq_mi_sxb<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.rm64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.rm64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorq_mi_sxb<R>> for Inst<R> {
    fn from(inst: xorq_mi_sxb<R>) -> Self {
        Self::xorq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorb: MR(rm8[rw], r8) => 0x30 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorb_mr<R> where R: Registers {
    pub rm8: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm8: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x30); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {rm8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorb_mr<R>> for Inst<R> {
    fn from(inst: xorb_mr<R>) -> Self {
        Self::xorb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorw: MR(rm16[rw], r16) => 0x66 + 0x31 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorw_mr<R> where R: Registers {
    pub rm16: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm16: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {rm16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorw_mr<R>> for Inst<R> {
    fn from(inst: xorw_mr<R>) -> Self {
        Self::xorw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorl: MR(rm32[rw], r32) => 0x31 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorl_mr<R> where R: Registers {
    pub rm32: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm32: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {rm32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorl_mr<R>> for Inst<R> {
    fn from(inst: xorl_mr<R>) -> Self {
        Self::xorl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorq: MR(rm64[rw], r64) => REX.W + 0x31 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorq_mr<R> where R: Registers {
    pub rm64: GprMem<R::ReadWriteGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(rm64: impl Into<GprMem<R::ReadWriteGpr, R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {rm64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorq_mr<R>> for Inst<R> {
    fn from(inst: xorq_mr<R>) -> Self {
        Self::xorq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorb: RM(r8[rw], rm8) => 0x32 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorb_rm<R> where R: Registers {
    pub r8: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm8: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorb_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r8: impl Into<Gpr<R::ReadWriteGpr>>, rm8: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm8: rm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorb") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm8) = &self.rm8 {
            if let Some(trap_code) = rm8.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x32); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm8); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorb_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm8 = self.rm8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm8}, {r8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorb_rm<R>> for Inst<R> {
    fn from(inst: xorb_rm<R>) -> Self {
        Self::xorb_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorw: RM(r16[rw], rm16) => 0x66 + 0x33 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorw_rm<R> where R: Registers {
    pub r16: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm16: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorw_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r16: impl Into<Gpr<R::ReadWriteGpr>>, rm16: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm16: rm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorw") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm16) = &self.rm16 {
            if let Some(trap_code) = rm16.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x33); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm16); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorw_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm16 = self.rm16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm16}, {r16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorw_rm<R>> for Inst<R> {
    fn from(inst: xorw_rm<R>) -> Self {
        Self::xorw_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorl: RM(r32[rw], rm32) => 0x33 /r [(_64b | compat)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorl_rm<R> where R: Registers {
    pub r32: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm32: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorl_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r32: impl Into<Gpr<R::ReadWriteGpr>>, rm32: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm32: rm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorl") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm32) = &self.rm32 {
            if let Some(trap_code) = rm32.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x33); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm32); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorl_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm32 = self.rm32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm32}, {r32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorl_rm<R>> for Inst<R> {
    fn from(inst: xorl_rm<R>) -> Self {
        Self::xorl_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorq: RM(r64[rw], rm64) => REX.W + 0x33 /r [_64b]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorq_rm<R> where R: Registers {
    pub r64: Gpr<R::ReadWriteGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub rm64: GprMem<R::ReadGpr, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorq_rm<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(r64: impl Into<Gpr<R::ReadWriteGpr>>, rm64: impl Into<GprMem<R::ReadGpr, R::ReadGpr>>) -> Self {
        Self {
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            rm64: rm64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorq") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let GprMem::Mem(rm64) = &self.rm64 {
            if let Some(trap_code) = rm64.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.rm64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x33); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.rm64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_gpr_mem(&mut self.rm64); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorq_rm<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let rm64 = self.rm64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {rm64}, {r64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorq_rm<R>> for Inst<R> {
    fn from(inst: xorq_rm<R>) -> Self {
        Self::xorq_rm(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorb: MI(m8[rw], imm8) => 0xF0 + 0x80 /6 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorb_mi<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Imm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorb_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Imm8>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorb_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m8.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x80); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m8.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorb_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorb_mi<R>> for Inst<R> {
    fn from(inst: lock_xorb_mi<R>) -> Self {
        Self::lock_xorb_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorw: MI(m16[rw], imm16) => 0xF0 + 0x66 + 0x81 /6 iw [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorw_mi<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm16: Imm16, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorw_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, imm16: impl Into<Imm16>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm16: imm16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorw_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m16.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m16.encode_rex_suffixes(buf, reg, 2, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm16.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorw_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm16 = self.imm16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorw_mi<R>> for Inst<R> {
    fn from(inst: lock_xorw_mi<R>) -> Self {
        Self::lock_xorw_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorl: MI(m32[rw], imm32) => 0xF0 + 0x81 /6 id [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorl_mi<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Imm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorl_mi<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Imm32>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorl_mi(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorl_mi<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorl_mi<R>> for Inst<R> {
    fn from(inst: lock_xorl_mi<R>) -> Self {
        Self::lock_xorl_mi(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorq: MI_SXL(m64[rw], imm32[sxq]) => 0xF0 + REX.W + 0x81 /6 id [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorq_mi_sxl<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm32: Simm32, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorq_mi_sxl<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm32: impl Into<Simm32>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm32: imm32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorq_mi_sxl(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x81); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 4, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm32.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorq_mi_sxl<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm32 = self.imm32.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm32}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorq_mi_sxl<R>> for Inst<R> {
    fn from(inst: lock_xorq_mi_sxl<R>) -> Self {
        Self::lock_xorq_mi_sxl(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorl: MI_SXB(m32[rw], imm8[sxl]) => 0xF0 + 0x83 /6 ib [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorl_mi_sxb<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorl_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorl_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m32.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m32.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorl_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendLong); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorl_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_xorl_mi_sxb<R>) -> Self {
        Self::lock_xorl_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorq: MI_SXB(m64[rw], imm8[sxq]) => 0xF0 + REX.W + 0x83 /6 ib [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorq_mi_sxb<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub imm8: Simm8, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorq_mi_sxb<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, imm8: impl Into<Simm8>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            imm8: imm8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorq_mi_sxb(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let digit = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:186
        let rex = self.m64.as_rex_prefix(digit, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:187
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x83); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = 0x6; // cranelift/assembler-x64/meta/src/generate/format.rs:472
        self.m64.encode_rex_suffixes(buf, reg, 1, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474

        // Emit immediate.
        self.imm8.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:496
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        let _ = visitor; // cranelift/assembler-x64/meta/src/generate/inst.rs:200
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorq_mi_sxb<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let imm8 = self.imm8.to_string(Extension::SignExtendQuad); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {imm8}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorq_mi_sxb<R>> for Inst<R> {
    fn from(inst: lock_xorq_mi_sxb<R>) -> Self {
        Self::lock_xorq_mi_sxb(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorb: MR(m8[rw], r8) => 0xF0 + 0x30 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorb_mr<R> where R: Registers {
    pub m8: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r8: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorb_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m8: impl Into<Amode<R::ReadGpr>>, r8: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m8: m8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r8: r8.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorb_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m8.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m8.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x30); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r8.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m8.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m8); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r8.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorb_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m8 = self.m8.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r8 = self.r8.to_string(Size::Byte); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r8}, {m8}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorb_mr<R>> for Inst<R> {
    fn from(inst: lock_xorb_mr<R>) -> Self {
        Self::lock_xorb_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorw: MR(m16[rw], r16) => 0xF0 + 0x66 + 0x31 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorw_mr<R> where R: Registers {
    pub m16: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r16: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorw_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m16: impl Into<Amode<R::ReadGpr>>, r16: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m16: m16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r16: r16.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorw_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m16.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m16.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r16.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m16.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m16); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r16.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorw_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m16 = self.m16.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r16 = self.r16.to_string(Size::Word); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r16}, {m16}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorw_mr<R>> for Inst<R> {
    fn from(inst: lock_xorw_mr<R>) -> Self {
        Self::lock_xorw_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorl: MR(m32[rw], r32) => 0xF0 + 0x31 /r [(_64b | compat)] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorl_mr<R> where R: Registers {
    pub m32: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r32: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorl_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m32: impl Into<Amode<R::ReadGpr>>, r32: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m32: m32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r32: r32.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorl_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m32.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m32.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r32.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m32.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m32); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r32.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() || features.compat() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F1: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F2: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::Or(F1, F2); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorl_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m32 = self.m32.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r32 = self.r32.to_string(Size::Doubleword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r32}, {m32}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorl_mr<R>> for Inst<R> {
    fn from(inst: lock_xorl_mr<R>) -> Self {
        Self::lock_xorl_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `lock_xorq: MR(m64[rw], r64) => 0xF0 + REX.W + 0x31 /r [_64b] custom(Mnemonic)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct lock_xorq_mr<R> where R: Registers {
    pub m64: Amode<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub r64: Gpr<R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> lock_xorq_mr<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(m64: impl Into<Amode<R::ReadGpr>>, r64: impl Into<Gpr<R::ReadGpr>>) -> Self {
        Self {
            m64: m64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            r64: r64.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        crate::custom::mnemonic::lock_xorq_mr(self) // cranelift/assembler-x64/meta/src/generate/inst.rs:113
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let Some(trap_code) = self.m64.trap_code() {
            buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:155
        }

        // Emit prefixes.
        buf.put1(0xF0); // cranelift/assembler-x64/meta/src/generate/format.rs:112

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = true; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.m64.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x31); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.r64.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.m64.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_amode(&mut self.m64); // cranelift/assembler-x64/meta/src/generate/inst.rs:221
        visitor.read_gpr(self.r64.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        features._64b() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F0: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for lock_xorq_mr<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let m64 = self.m64.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let r64 = self.r64.to_string(Size::Quadword); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {r64}, {m64}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<lock_xorq_mr<R>> for Inst<R> {
    fn from(inst: lock_xorq_mr<R>) -> Self {
        Self::lock_xorq_mr(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorps: A(xmm1[rw], xmm_m128[align]) => 0x0F + 0x57 /r [((_64b | compat) & sse)] (alternate: avx => vxorps_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorps_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorps_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x57); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorps_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorps_a<R>> for Inst<R> {
    fn from(inst: xorps_a<R>) -> Self {
        Self::xorps_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `xorpd: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0x57 /r [((_64b | compat) & sse2)] (alternate: avx => vxorpd_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct xorpd_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> xorpd_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("xorpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0x57); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for xorpd_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<xorpd_a<R>> for Inst<R> {
    fn from(inst: xorpd_a<R>) -> Self {
        Self::xorpd_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `pxor: A(xmm1[rw], xmm_m128[align]) => 0x66 + 0x0F + 0xEF /r [((_64b | compat) & sse2)] (alternate: avx => vpxor_b)` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct pxor_a<R> where R: Registers {
    pub xmm1: Xmm<R::ReadWriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> pxor_a<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::ReadWriteXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("pxor") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit prefixes.
        buf.put1(0x66); // cranelift/assembler-x64/meta/src/generate/format.rs:118

        // Possibly emit REX prefix.
        let uses_8bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:141
        let w_bit = false; // cranelift/assembler-x64/meta/src/generate/format.rs:142
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:198
        let rex = self.xmm_m128.as_rex_prefix(reg, w_bit, uses_8bit); // cranelift/assembler-x64/meta/src/generate/format.rs:199
        rex.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:219

        // Emit opcode(s).
        buf.put1(0x0f); // cranelift/assembler-x64/meta/src/generate/format.rs:516
        buf.put1(0xef); // cranelift/assembler-x64/meta/src/generate/format.rs:524

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.read_write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.sse2() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::sse2); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for pxor_a<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<pxor_a<R>> for Inst<R> {
    fn from(inst: pxor_a<R>) -> Self {
        Self::pxor_a(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vxorps: B(xmm1[w], xmm2, xmm_m128) => VEX.128.0F.WIG 0x57 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vxorps_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vxorps_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vxorps") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b00; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x57); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vxorps_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vxorps_b<R>> for Inst<R> {
    fn from(inst: vxorps_b<R>) -> Self {
        Self::vxorps_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vxorpd: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0x57 /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vxorpd_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vxorpd_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vxorpd") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0x57); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vxorpd_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vxorpd_b<R>> for Inst<R> {
    fn from(inst: vxorpd_b<R>) -> Self {
        Self::vxorpd_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

/// `vpxor: B(xmm1[w], xmm2, xmm_m128) => VEX.128.66.0F.WIG 0xEF /r [((_64b | compat) & avx)]` // cranelift/assembler-x64/meta/src/generate/inst.rs:14
#[derive(Copy, Clone, Debug)] // cranelift/assembler-x64/meta/src/generate.rs:96
#[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] // cranelift/assembler-x64/meta/src/generate.rs:97
#[cfg_attr(any(test, feature = "fuzz"), arbitrary(bound = "R: crate::fuzz::RegistersArbitrary"))] // cranelift/assembler-x64/meta/src/generate.rs:106
pub struct vpxor_b<R> where R: Registers {
    pub xmm1: Xmm<R::WriteXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm2: Xmm<R::ReadXmm>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
    pub xmm_m128: XmmMem<R::ReadXmm, R::ReadGpr>, // cranelift/assembler-x64/meta/src/generate/inst.rs:23
}
impl<R: Registers> vpxor_b<R> {
    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:89
    pub fn new(xmm1: impl Into<Xmm<R::WriteXmm>>, xmm2: impl Into<Xmm<R::ReadXmm>>, xmm_m128: impl Into<XmmMem<R::ReadXmm, R::ReadGpr>>) -> Self {
        Self {
            xmm1: xmm1.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm2: xmm2.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
            xmm_m128: xmm_m128.into(), // cranelift/assembler-x64/meta/src/generate/inst.rs:94
        }
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:107
    #[inline] // cranelift/assembler-x64/meta/src/generate/inst.rs:108
    pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str> {
        alloc::borrow::Cow::Borrowed("vpxor") // cranelift/assembler-x64/meta/src/generate/inst.rs:115
    }

    pub fn encode(&self, buf: &mut impl CodeSink) {
        // Emit trap.
        if let XmmMem::Mem(xmm_m128) = &self.xmm_m128 {
            if let Some(trap_code) = xmm_m128.trap_code() {
                buf.add_trap(trap_code); // cranelift/assembler-x64/meta/src/generate/inst.rs:163
            }
        }

        // Emit VEX prefix.
        let len = 0b0; // cranelift/assembler-x64/meta/src/generate/format.rs:226
        let pp = 0b01; // cranelift/assembler-x64/meta/src/generate/format.rs:227
        let mmmmm = 0b00001; // cranelift/assembler-x64/meta/src/generate/format.rs:228
        let w = false; // cranelift/assembler-x64/meta/src/generate/format.rs:229
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:331
        let vvvv = self.xmm2.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:332
        let rm = self.xmm_m128.encode_bx_regs(); // cranelift/assembler-x64/meta/src/generate/format.rs:333
        let prefix = VexPrefix::three_op(reg, vvvv, rm, len, pp, mmmmm, w); // cranelift/assembler-x64/meta/src/generate/format.rs:334
        prefix.encode(buf); // cranelift/assembler-x64/meta/src/generate/format.rs:436

        // Emit opcode.
        buf.put1(0xef); // cranelift/assembler-x64/meta/src/generate/format.rs:537

        // Emit ModR/M byte.
        let reg = self.xmm1.enc(); // cranelift/assembler-x64/meta/src/generate/format.rs:471
        self.xmm_m128.encode_rex_suffixes(buf, reg, 0, None); // cranelift/assembler-x64/meta/src/generate/format.rs:474
    }

    pub fn visit(&mut self, visitor: &mut impl RegisterVisitor<R>) {
        visitor.write_xmm(self.xmm1.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm(self.xmm2.as_mut()); // cranelift/assembler-x64/meta/src/generate/inst.rs:209
        visitor.read_xmm_mem(&mut self.xmm_m128); // cranelift/assembler-x64/meta/src/generate/inst.rs:214
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:231
    pub fn is_available(&self, features: &impl AvailableFeatures) -> bool {
        (features._64b() || features.compat()) && features.avx() // cranelift/assembler-x64/meta/src/generate/inst.rs:236
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:243
    pub fn features(&self) -> &'static Features {
        const F2: &'static Features = &Features::Feature(Feature::_64b); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F3: &'static Features = &Features::Feature(Feature::compat); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F1: &'static Features = &Features::Or(F2, F3); // cranelift/assembler-x64/meta/src/generate/features.rs:93
        const F4: &'static Features = &Features::Feature(Feature::avx); // cranelift/assembler-x64/meta/src/generate/features.rs:96
        const F0: &'static Features = &Features::And(F1, F4); // cranelift/assembler-x64/meta/src/generate/features.rs:88
        F0 // cranelift/assembler-x64/meta/src/generate/features.rs:74
    }

    #[must_use] // cranelift/assembler-x64/meta/src/generate/inst.rs:251
    pub fn num_registers_available(&self) -> usize {
        16 // cranelift/assembler-x64/meta/src/generate/inst.rs:258
    }
}
impl<R: Registers> core::fmt::Display for vpxor_b<R> {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        let name = self.mnemonic(); // cranelift/assembler-x64/meta/src/generate/inst.rs:278
        let xmm1 = self.xmm1.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm2 = self.xmm2.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        let xmm_m128 = self.xmm_m128.to_string(); // cranelift/assembler-x64/meta/src/generate/inst.rs:286
        write!(f, "{name} {xmm_m128}, {xmm2}, {xmm1}") // cranelift/assembler-x64/meta/src/generate/inst.rs:298
    }
}
impl<R: Registers> From<vpxor_b<R>> for Inst<R> {
    fn from(inst: vpxor_b<R>) -> Self {
        Self::vpxor_b(inst) // cranelift/assembler-x64/meta/src/generate/inst.rs:313
    }
}

#[doc(hidden)] // cranelift/assembler-x64/meta/src/generate/features.rs:12
#[macro_export] // cranelift/assembler-x64/meta/src/generate/features.rs:13
macro_rules! for_each_feature {
    ($m:ident) => {
        $m! {
            _64b // cranelift/assembler-x64/meta/src/generate/features.rs:18
            compat // cranelift/assembler-x64/meta/src/generate/features.rs:18
            sse // cranelift/assembler-x64/meta/src/generate/features.rs:18
            sse2 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            sse3 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            ssse3 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            sse41 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            sse42 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            bmi1 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            bmi2 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            lzcnt // cranelift/assembler-x64/meta/src/generate/features.rs:18
            popcnt // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx2 // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx512f // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx512vl // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx512dq // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx512bitalg // cranelift/assembler-x64/meta/src/generate/features.rs:18
            avx512vbmi // cranelift/assembler-x64/meta/src/generate/features.rs:18
            cmpxchg16b // cranelift/assembler-x64/meta/src/generate/features.rs:18
            fma // cranelift/assembler-x64/meta/src/generate/features.rs:18
        }
    }
}
